我正在向SQL Azure DB添加非集群索引,我想知道在单个非聚集索引中有多个列之间有什么区别,有多个非聚集索引,每个索引中只有一列?多列上的非集群索引VS单个索引中的多列
0
A
回答
2
单个非聚集索引中有多个列之间的区别,有多个非聚集索引,每个非聚集索引都有一个单独的列?
考虑一个表T
与clucstered PK Id
柱,并且附加列A
,B
,C
。
含A
,B
和C
可以支持快速查询的查询,如单个非聚集索引:在这两个案件
WHERE A > @a
WHERE A = @a AND @b1 < B AND B < @b2
WHERE A = @a AND B = @b AND C < @c
但不
WHERE B = @b
WHERE C = @c
,我们不能做任何不是表扫描更好
然而,如果我们有多个索引,IX_A
A
等:
WHERE A = @a
WHERE B = @b
WHERE C = @c
都会受益于索引和复合查询,如
WHERE A = @a AND B = @b AND C < @c
将有一个小的好处了。
0
SELECT
查询那些会优化的不一样。
您不应该在不需要查询性能优化的情况下添加索引。
如果您有查询优化,那么您可以开始考虑添加对应于您要优化的查询的索引。
比方说,你有包含以下结构的一个表:
create table emp
(
id int identity primary key clustered,
name nvarchar(200),
dep_id int,
salary int
);
您的聚集索引(primary key clustered
条款)将加快使用id
列过滤查询查找和行数据检索像:
select id, name, dep_id, salary
from emp
where id = @id
任何(唯一的)列的任何非聚集索引将加快查询(试验时他行数据检索)使用相同的列作为过滤器。
create index emp_name_idx on emp(name);
-- will speed up look-up for
select id, dep_id
from emp
where name = @name
如果你也想使用相同的索引来加速该行的数据检索,将需要目前SELECT
子句中的列添加到包括列。
create index emp_name_idx on emp(name) include(id, dep_id);
-- will speed up look-up and data row retrieval for
select id, dep_id
from emp
where name = @name
含有倍数的列,因为它们出现在索引(只要过滤器是相等比较将加快查找使用以相同的顺序在第一n列的查询任何非聚集索引,所述当满足第一个不等式比较时,列优化条带将结束)。
create index emp_namesalary_idx on emp(dep_id, salary);
-- will speed up look-up and data row retrieval for
select id, dep_id
from emp
where dep_id = @dep_id
and salary > @salary
对于单列索引,也优化行数据检索,使用include
子句SELECT
条款,是不是已经存在于索引列列表中指定的每个列。
请记住,对于添加到表中的每个索引,您还将为此表添加INSERT
开销。因此,您应该始终在SELECT
报表上的指数收益与INSERT
报表亏损之间平衡表现。 还请记住,索引使用磁盘(和缓存)空间,这也应该在决策过程中计数。
相关问题
- 1. 多列索引VS多个索引
- 2. 单独列索引VS多
- 3. MySQL的多个索引VS多列索引搜索
- 4. 集群索引列上的非集群索引可提高性能?
- 5. 两列上的单个非聚集索引或每列上的单独索引?
- 6. 实体框架多对多群集与非群集索引
- 7. 组合多列索引以及多个单列索引
- 8. 多列索引比mysql中的单列索引慢
- 9. 索引多列
- 10. 索引多列
- 11. 我应该使用多个单列索引还是单个多列索引?
- 12. 多个集群索引效应
- 13. 按集群式列存储索引中的索引排序
- 14. 多列索引或者时间序列MySQL表多个索引?
- 15. elasticsearch性能搜索单索引vs多个索引
- 16. 2列或多个索引上的SQL-1索引
- 17. 的SQL Server创建的一列多个非聚集索引VS在短短的一个指数具有多列
- 18. 多列索引搜索Microsoft.Isam.Esent
- 19. MySQL多列索引
- 20. 多列mysql索引
- 21. Grails多列索引
- 22. MYSQL多列索引
- 23. 集群索引
- 24. SQL在一个表上创建多列索引和单列索引
- 25. PostgreSQL单列索引与多列索引优化SELECT性能
- 26. 将多索引索引转换为列
- 27. 使用Rails/Postgresql索引多列索引
- 28. 多列索引列顺序
- 29. 效率多列索引的
- 30. MySQL的多列索引
我有一吨的查询各做别的事情。 – user1662812
然后,您可以优化这些中的每一个,最好只有资源密集型的,这取决于您插入的性能需求。如果您需要关于哪些索引可以加快哪些查询的建议,则应该开始阅读索引编制的基础知识。我会更新答案给一个简单的例子。 – Paciv