【发布时间】:2015-07-24 01:02:43
【问题描述】:
我继承的代码中有以下查询:
SELECT a.row2, a.row3
FROM table1 a
JOIN table2 b ON a.row1 = b.row1
WHERE b.row2 IN (
SELECT id
FROM table3
WHERE id IN ($table3_ids)
)
ORDER BY RAND();
[a.row1 是 table1 的主键]
几个问题:
有没有更有效的方法来构建这个查询?
我已经在 (row1, row2, row4) 的 table1 中有一个索引;为(row1,row2,row3)创建一个单独的索引是多余的,还是我应该用(row1,row2,row3,row4)上的索引替换前者?
从另一端,我已经在 table2 的 (row1, row2, row3) 上有一个索引;因为看起来我需要在 table2 中为 (row1, row2) 建立一个索引来优化这个查询,所以包含一个简单地排除同一个表中不同索引中的单个元素的索引是否是多余的?
这是我不清楚查询引擎如何知道哪个索引合适的地方;解析查询时,是否首先检查表中的匹配索引?
-
最后(可能是最简单的回答),我正在使用以下语法添加索引:
ALTER TABLE table_name ADD KEY (row1, row2, row3);
创建索引后,我将手动重命名每个索引。是否可以在命令中包含索引的名称?
非常感谢!
【问题讨论】:
-
也许你的意思是
column而不是row?