如何建立最适合此SQL的索引?

时间:2019-05-23 10:21:00

标签: sql database indexing

我正在通过简单的SQL查询数据库,例如:

SELECT DISTINCT label FROM Document WHERE folderId=123

我需要一个最佳索引。

有两种实现方法。

(1)创建两个索引

CREATE INDEX .. ON Document (label)
CREATE INDEX .. ON Document (folderId)

(2)创建一个复合索引:

CREATE INDEX .. ON Document (folderId, label)

根据数据库索引执行。哪种方法更合理?谢谢。

2 个答案:

答案 0 :(得分:0)

答案也取决于所使用的dbms。我不确定所有的dbms是否都支持使用多个索引。

我应该认为组合索引(文件夹ID,标签)在您的情况下是最好的解决方案,因为可以仅通过使用索引数据来构建结果集。因此,它甚至不需要访问真实数据。 甚至可以将策略添加到索引中,这样,仅通过访问索引就可以回答很多查询。

答案 1 :(得分:0)

您的第二个索引(复合索引)是此查询的最佳索引:

SELECT DISTINCT label
FROM Document
WHERE folderId = 123;

首先,索引涵盖了查询,因此(在大多数数据库中)不需要访问数据页。

该索引起作用是因为引擎可以搜索带有标识的folderId的记录。可以提取label上的信息。大多数数据库也应使用索引来拉出不同的标签。