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/