gpt4 book ai didi

sql - 了解 SQL 中索引的基础知识

转载 作者:行者123 更新时间:2023-12-01 13:28:25 26 4
gpt4 key购买 nike

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 上建立索引比在 year 上建立索引更有帮助,因为在这种情况下我们必须查找小于 1990 年的所有年份,所以如果我们在 year 上建立索引,我们将不得不搜索小于 1990 年的所有年份的路径,所以我认为以 studioname、year 为索引是更好的选择。

这是正确的思考方式吗?

最佳答案

没错,(year, studioName) 上的索引是最好的。当您在两列上都有条件时,它允许快速查找。

如果您有第二个查询只搜索年份,而不搜索工作室名称,那么相同的索引也会有所帮助。

但如果您只有 (studioName, year) 的索引,并且您只搜索特定年份,则该索引将无济于事。

想想电话簿。您可以按姓氏搜索人员,因为这就是本书的排序方式。您还可以按姓氏和名字搜索人员,这本书的帮助更大。

但是,如果您只搜索具有给定名字的人,那么这本书的排序顺序就没有多大帮助。

您可能会喜欢我的介绍,How to Design Indexes, Really ,或我展示它的视频:https://www.youtube.com/watch?v=ELR7-RdU9XU

该演示文稿是为 MySQL 量身定制的,但许多想法适用于任何使用 B 树结构实现索引的数据库。

关于sql - 了解 SQL 中索引的基础知识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42182773/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com