我有一张类似于下面的表格
Table Keywords
Column ID
Column Keyword
Column Keyword2
第一个查询是
select keyword from keywords with (nolock) where keyword = keyword
同一个表格的另一个查询是
select keyword2 from with (nolock) keywords where keyword2 Like 'keyword%'
此表包含 600k 行,并且不断增长。
谢谢
答案 0 :(得分:6)
由于您的两个查询位于完全独立的列上,因此您需要两个单独的非聚集索引:
keyword
上的一个索引可加快第一个查询keyword2
上的第二个索引,以加快第二个查询假设你正在使用SQL Server:我认为它们都没有真正成为一个好的聚簇索引 - 但良好的聚簇索引真的很有用!
一个好的聚集索引应该是:
您最好的选择是INT IDENTITY
字段。有关良好群集密钥要求的更详细背景,请参阅Kimberly Tripp的优秀博客文章Ever-increasing clustering key - the Clustered Index Debate..........again!。
答案 1 :(得分:0)
如果我们真的看到了唯一的用例,那么您需要keyword2
上的群集密钥,然后希望您的DBMS足够智能,以便使用LIKE
运算符优化索引使用。当典型查询中返回的行在数据库中相邻时,群集会有所帮助,因此在keyword2
上按字母顺序保留表将意味着必须在SELECT上扫描的页面更少。对访问非常随机的表进行聚类(例如,用户名)不会给您带来任何标准索引。