快速多选 MySQL 和 PHP
Posted
技术标签:
【中文标题】快速多选 MySQL 和 PHP【英文标题】:Fast multi select MySQL and PHP 【发布时间】:2017-07-28 17:35:59 【问题描述】:我正在寻找一种快速查询 2.704 mysql 选择的方法。 目前这个查询需要202.91903秒,太慢了。
进行这么多查询的最佳方法是什么?
我为什么需要这个?
我有 26 个表格,其中包含从 24.11.2016 到今天的条目。每分钟都有一个新条目。 (时间上午 10:00 至次日凌晨 04:00)。 现在我需要选择每天最新的条目,但最新的条目可能在 04:00:00,但也可以更早(例如下午 03:00) 我永远不知道最后一个条目是什么时候。 所以我有以下选择:
SELECT `column1`, `column2`, `column3`
FROM `table`
WHERE `timestamp`>='2016-11-24 10:00:00' AND `timestamp`< '2016-11-25 04:01:00'
ORDER BY `id` DESC LIMIT 1
我为每一天和每张桌子做的这个选择。
有没有人有办法加快这个速度?
【问题讨论】:
在查询中使用解释 2.704这个数字从何而来? 尽量理解问题,不要给出这么生硬的回答。为什么要使用 php 动态生成 2.704 查询? 我不太明白您要做什么,但是如果您需要从不同表中选择少量静态记录,您可能应该每天将新记录复制到一个新表中以用于你的分析。 所以你必须在这里询问才能得到一个想法。显然,查询的数量是这里的关键问题。 【参考方案1】:在您的表上为列时间戳创建索引。当您的表行越来越大时,需要索引才能快速搜索您的记录。如果没有索引,就好像您正在搜索第 1 行到您要查找的行中的数百万行。
示例 在 table_name (column_name) 上创建索引 index_name
【讨论】:
【参考方案2】:如果我说对了... 我想你可以把你的改成这个
SELECT `column1`, `column2`, `column3`
FROM `table`
WHERE date_format(`timestamp`,'%d/%m/%Y')=date_format(curdate(),'%d/%m/%Y')
ORDER BY `timestamp` DESC LIMIT 1
我使用 timestamp
和 curdate() 仅选择今天的记录,按 timestamp
降序排列,因此较早的将位于顶部并将行限制为 1,因此您将只有最早的记录。
【讨论】:
您只是展示了一种格式化查询的方法,而不是解决手头的问题。 但是是什么让你尝试?为什么你等了 11 个月,然后突然决定回答这个问题? @YourCommonSense 我没有等 11 个月。事实上,我在这里提出了一些问题,但从来没有得到正确的答案,或者我在一天左右后自己找到了答案。在这两种情况下,我的问题都被删除了。编辑:我的许多问题也已经在这里问过了。以上是关于快速多选 MySQL 和 PHP的主要内容,如果未能解决你的问题,请参考以下文章