- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下查询:
SELECT
COUNT(*)
FROM
FirstTable ft
INNER JOIN SecondTable st ON ft.STID = st.STID
您可以猜到,“STID”是“SecondTable”上的主键……而“FirstTable”将有一个指向第二个表的指针。这是我拥有的索引:
FirstTable:“STID”列上的 NONCLUSTERED INDEX
SecondTable:“STID”上的 CLUSTERED PRIMARY KEY
INDEX
上面的查询为我提供了 19.90 的子树成本,需要 2 秒。
为该查询运行数据库调优顾问后,他们建议制作与我在第二个表上使用的索引完全相同...但非聚集。所以我尝试了这些结果。
FirstTable:“STID”列上的 NONCLUSTERED INDEX
SecondTable:“STID”上的NONCLUSTERED
INDEX
现在,上面的查询为我提供了 10.97 的子树成本并且耗时 <1 秒!
这 100% 打碎了我的大脑……在这种情况下,为什么 NONCLUSTERED 索引比 CLUSTERED 索引执行得更快?
最佳答案
因为您的查询没有从表中检索任何实际记录,所以它只是计数。
对于非聚集索引,它仅使用最有可能的 MERGE JOIN
连接两个索引(其大小小于表)。
有了聚簇索引,它必须连接表和非聚簇索引。表更大,遍历它需要更多时间。
如果您发出这样的查询:
SELECT SUM(first_table_field + second_table_field)
FROM FirstTable ft
INNER JOIN
SecondTable st
ON ft.STID = st.STID
它检索实际值,您将看到聚类的好处。
关于sql-server - SQL索引问题: Why does SQL Server prefer this NONCLUSTERED index to a CLUSTERED one?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371005/
我已经阅读了很多关于索引和它们之间差异的内容。现在我正在我的项目中进行查询优化。我已经创建了非聚集索引,它应该用于查询执行,但事实并非如此。详情如下: 表格: 索引: CREATE NONCLUSTE
我已经阅读了很多关于索引和它们之间差异的内容。现在我正在我的项目中进行查询优化。我已经创建了非聚集索引,它应该用于查询执行,但事实并非如此。详情如下: 表格: 索引: CREATE NONCLUSTE
我在数据库中定义了以下表 铺表 店铺编号 店名 所有者 横幅 标题 城市编号 ShopImageId 活跃 城市表 城市编号 城市名 国家/地区 地区编号 国家/地区表 国家/地区 国家名称 地区编号
当我以一种简单的方式创建一个 index 时,一切正常: create index qty_ix on vacancy_desc_to_words (qty); 但是当我尝试创建 NONCLUSTER
我使用 SQL Server 2008。 我正在尝试在我的表上创建一个非聚集索引。我想检查是否有一种方法可以在不为索引命名的情况下创建它。 例如 CREATE TABLE #mytable (Date
我有以下查询: SELECT COUNT(*) FROM FirstTable ft INNER JOIN SecondTable st ON ft.STID = st
我是一名优秀的程序员,十分优秀!