gpt4 book ai didi

sql - 创建 SQL 索引的最佳方式?

转载 作者:太空狗 更新时间:2023-10-30 02:01:08 24 4
gpt4 key购买 nike

在 SQL 数据库中创建 SQL 索引的最佳方法是什么?

CREATE INDEX idx ON sometable (col1, col2, col3);

或者

CREATE INDEX idx1 ON sometable (col1);
CREATE INDEX idx2 ON sometable (col2);
CREATE INDEX idx3 ON sometable (col3);

这两种方法有什么区别?它取决于 SQL 实现吗? (SQLite、MySQL、MSSQL 等)?使用这两种方法中的任何一种时,是否有任何效率方面的考虑?

最佳答案

CREATE INDEX idx ON sometable (col1, col2, col3);

这将在所有三个字段上一起创建一个索引。这是完美的,如果您的查询大部分时间都将所有三个字段用于其 WHERE 子句:

SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2 AND col3 = 3

当你单独查询 col1 和 col2 时,也会使用这个复合索引:

SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2 

但如果您分别查询 col2col3,或者查询 col2col3,则无法使用> 一起:

SELECT (fields) FROM Table WHERE col2 = 2 AND col3 = 3  -- will *NOT* use index
SELECT (fields) FROM Table WHERE col2 = 2 -- will *NOT* use index
SELECT (fields) FROM Table WHERE col3 = 3 -- will *NOT* use index

另一方面,如果您使用:

CREATE INDEX idx1 ON sometable (col1);
CREATE INDEX idx2 ON sometable (col2);
CREATE INDEX idx3 ON sometable (col3);

然后您在每个字段上创建三个独立的索引。在这种情况下,任何仅使用其中一列的查询都将从该列的索引中受益:

SELECT (fields) FROM Table WHERE col1 = 1   -- will use index on col1
SELECT (fields) FROM Table WHERE col2 = 2 -- will use index on col2
SELECT (fields) FROM Table WHERE col3 = 3 -- will use index on col3

但是,如果您在单个查询中同时查询两个或所有三个列:

SELECT (fields) FROM Table WHERE col1 = 1 AND col2 = 2 AND col3 = 3

然后将只使用创建的三个索引中的一个,并且它很可能比 (col1, col2, col3) 上的复合索引效率低。

所以是的,创建这些索引的方式肯定有所不同,但是没有单一的“最佳方法”来执行此索引。这实际上完全取决于您查询数据的方式,以及在您的情况下这两个选项中哪一个是“更好”的选项。

关于sql - 创建 SQL 索引的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3378284/

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