php - 如何控制两个表之间的mysql查询执行时间

标签 php mysql database

SELECT a, b,c, table1.a, e FROM table1, table2    
WHERE (table1.a = table2.a and table2.id='111')   
and TIME_TO_SEC(TIMEDIFF( NOW( ) , table2.time )) < 172800

我的查询就是这种类型,其中 a 和 id 是 table1 和 table2 中的索引。 该查询执行时间很长。两个表都有数百万条数据。我该如何解决这个问题?

最佳答案

我怀疑这一点:

TIME_TO_SEC(TIMEDIFF( NOW( ) , table2.time )) < 172800

由于该列被函数包装,因此无法在 table2.time 上使用任何索引。

您可以尝试重写它,使普通列位于左侧,所有功能内容位于右侧,例如

table2.time > (NOW() - 172800)

假设时间以秒为单位(可能不是,因为您使用的是TIME_TO_SEC,但您已经了解了总体思路)。

此外....使用 EXPLAIN 运行此命令(只需将 EXPLAIN 一词添加到查询前面并运行它)以查看工作进展情况。

关于php - 如何控制两个表之间的mysql查询执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625891/

相关文章:

mysql - 不同的数据库使用不同的名称引用吗?

php - 重新排列数据库表项目顺序的最佳方法?

php - option select by based on the value from db with php 选项

php - WordPress如何阅读评论行

sql - MySQL 跳过一个子级别

php - sql datetime 与日期值比较

php - 如何使用 PHP 在 AWS S3 上删除早于 x 时间的文件

mysql - 在 mysql 中指定 id 替换为

mongodb - 复制数据库时不针对 admin db 进行身份验证

database - 如何说服某人规范化数据库?