我正在通过简单的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)
根据数据库索引执行。哪种方法更合理?谢谢。
答案 0 :(得分:0)
答案也取决于所使用的dbms。我不确定所有的dbms是否都支持使用多个索引。
我应该认为组合索引(文件夹ID,标签)在您的情况下是最好的解决方案,因为可以仅通过使用索引数据来构建结果集。因此,它甚至不需要访问真实数据。 甚至可以将策略添加到索引中,这样,仅通过访问索引就可以回答很多查询。
答案 1 :(得分:0)
您的第二个索引(复合索引)是此查询的最佳索引:
SELECT DISTINCT label
FROM Document
WHERE folderId = 123;
首先,索引涵盖了查询,因此(在大多数数据库中)不需要访问数据页。
该索引起作用是因为引擎可以搜索带有标识的folderId
的记录。可以提取label
上的信息。大多数数据库也应使用索引来拉出不同的标签。