快速多选 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的主要内容,如果未能解决你的问题,请参考以下文章

Laravel框架快速入门教程

ThinkPhp6框架快速入门教程

Laravel9框架快速入门教程

基于Laravel+Layui框架快速入门教程

mysql 用php安全快速的选择和插入

PHP和MySQL,快速连续多次检查行的有效方法?