如何控制两个表之间的 MySQL 查询执行时间


how to control mysql query execution time between two table

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 是表 1 和表 2 中的索引。此查询需要很长时间才能执行。这两个表都有数百万个数据。我该如何解决这个问题?

我怀疑这一点:

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

使得无法在table2.time上使用任何索引,因为列由函数包装。

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

table2.time > (NOW() - 172800)

假设time以秒为单位(可能不是,因为您使用的是TIME_TO_SEC,但您得到了大致的想法(。

也。。。。使用 EXPLAIN 运行它(只需将单词 EXPLAIN 添加到查询的前面并运行它(以查看工作的进展。