SELECT *
FROM Movies
WHERE studioName = ‘Disney’ AND year = 1990;
每个索引的帮助程度是多少?
CREATE INDEX YearIndex ON Movies(year);
CREATE INDEX StudioIndex ON Movies(studioName);
CREATE INDEX YSIndex ON Movies(year,studioName);
CREATE INDEX SYIndex ON Movies(studioName,year);
如果WHERE子句是year = 1990,每个索引会有多少帮助?
创建年度指数确实会有所帮助,因为电影创建的时间很多,所以搜索量会大大降低。
Studioname
也会有所帮助,但不会像年份一样多,因为有多年的时间比学生更多。
year,studioname
在这种情况下,是更好的选择,因为显然搜索最小化的次数超过前两次
studioname,year
很好但不如以前好。
如果WHERE子句是年<每个索引有多少帮助? 1990?
对studioname进行索引比在年度索引更有帮助,因为在这种情况下我们必须查看所有年份不到1990年,所以如果我们在年份上进行索引,我们将不得不搜索所有年份的路径,而不是1990年,所以我认为对studioname,年份进行索引是更好的选择。
这是考虑这个的正确方法吗?
答案 0 :(得分:2)
你是对的,(year,studioName)上的索引是最好的。当两个列都有条件时,它允许快速查找。
如果您有第二个查询只搜索年份,但不搜索studioName,那么相同的索引也会有所帮助。
但是如果你只有一个索引(studioName,year),而你只搜索特定年份,那么索引就无济于事。
想一下电话簿。您可以按姓氏搜索人员,因为这是该书的排序方式。您还可以按姓氏和名字搜索人员,这本书可以提供更多帮助。
但是如果你只搜索具有给定名字的人,那么这本书的排序顺序就没什么用了。
您可能会喜欢我的演示文稿,How to Design Indexes, Really或我提供的视频:https://www.youtube.com/watch?v=ELR7-RdU9XU
该演示文稿是针对MySQL量身定制的,但许多想法适用于使用B树结构实现索引的任何数据库。