我使用的是MySQL和InnoDB。假设我有以下查询:
SELECT id FROM
Foo
INNER JOIN
Bar
ON Foo.id = Bar.fooId
WHERE Foo.column1 = N
ORDER BY Foo.column2 DESC LIMIT 100这里,Foo.id是主键,Bar.fooId是FK。
我应该添加到Foo和Bar表中的最佳索引是什么?
目前我在Foo表中有一个关于(Foo.column1, Foo.column2)的索引。我是否应该将Foo.id也添加到此综合索引中?顺序是什么?
我找不到任何正式的参考资料来涵盖这个主题。
发布于 2016-04-11 19:43:19
对于Foo来说,(Foo.column1, Foo.column2)应该足够了,你不需要在末尾添加PK,因为innodb总是在每个索引的末尾都有PK。Bar需要有一个关于fooId的索引。
运行explain <query>检查MySQL正在做什么。
对于Foo,您应该得到类型ref,在extra中不带using filesort的using index和100行。
Bar应该在extra中有ref和using index类型。
https://stackoverflow.com/questions/36546411
复制相似问题