sql server索引怎么用
2个回答
2016-04-18 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
1、打开 SQL Server Management Studio并连接到数据库引擎数据库。
2、在“对象资源管理器”窗格中展开“数据库”节点。再打开“数据库”节点下的“表”节点,再展开dbo.格式的表。
3、右击“索引”选项,在弹出的快捷菜单中选择“新建索引”命令。
4、在打开的“新建索引”对话框中,设置索引的名称,索引类型为“聚集”, 然后单击“添加”按钮。
5、在打开的 “从dbo.表 中选择列” 对话框中选择要添加到索引键的表列。 然后点击“确定”按钮。
6、选择索引键后的“新建索引”对话框中,设置索引列的排序为“升序/降序”,设置完成后,单击“新建索引”对话框的“确定”按钮,这样就为表创建了索引。
2、在“对象资源管理器”窗格中展开“数据库”节点。再打开“数据库”节点下的“表”节点,再展开dbo.格式的表。
3、右击“索引”选项,在弹出的快捷菜单中选择“新建索引”命令。
4、在打开的“新建索引”对话框中,设置索引的名称,索引类型为“聚集”, 然后单击“添加”按钮。
5、在打开的 “从dbo.表 中选择列” 对话框中选择要添加到索引键的表列。 然后点击“确定”按钮。
6、选择索引键后的“新建索引”对话框中,设置索引列的排序为“升序/降序”,设置完成后,单击“新建索引”对话框的“确定”按钮,这样就为表创建了索引。
2016-03-09
展开全部
一、索引设计注意事项
(1)、检查WHERE条件和连接条件
当一条SQL语句提交时,查询优化器会根据表的信息查询最优的访问机制
1、优化器首先识别WHERE子句与连接条件中包含的列
2、优化器检索这些列上的索引
3、优化器通过从索引上的维护统计来确定子句的选择性以及评估索引的有效性
4、优化器根据前面几个步骤的信息,选择估计开销最低的方式
[sql] view plain copy
DBCC FREEPROCCACHE
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT p.ProductID,p.Name,p.StandardCost,p.Weight,p.Color,p.ProductNumber
FROM Production.Product AS p
WHERE p.ProductID=871
表 'Product'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
这里采用的数据库是微软提供的示例数据库AdventureWorks2008。
WHERE条件里面有ProductID,该字段上面有一个聚簇索引(主键),根据优化器的选择,最终选择该索引
[sql] view plain copy
DBCC FREEPROCCACHE
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT pm.Name,p.ProductID,p.Name,p.StandardCost,p.Weight,p.Color,p.ProductNumber
FROM Production.Product AS p
INNER JOIN Production.ProductModel AS pm ON pm.ProductModelID=p.ProductModelID
WHERE p.ProductID=871
表 'ProductModel'。扫描计数 0,逻辑读取 2 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Product'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
ProductModelID是ProductModel的主键,也是Product的外键 ,ProductID是Product的主键,查看执行计划从上到下,从右到左。
首先根据ProductID=871查找Product表,这里使用聚簇索引没有问题。
第二部就是ProductModel表,这里根据连接条件来,发现也有可用的聚簇索引,所以上图使用了两个聚簇索引。
(2)、使用窄索引
在实际中,一般使用整形列来作为索引列,像VARCHAR、NVARCHAR等可能会很大,一般不用来作为索引列。
窄索引可以在8KB的索引页面容纳更多的行,这样有许多好处
A、减少IO数量(读取更少的8KB页面)
B、是数据库缓存更有效,SQL Server可以缓存更少的索引页面,从而减少内存中索引页面的逻辑读
C、减少数据库存储空间
(1)、检查WHERE条件和连接条件
当一条SQL语句提交时,查询优化器会根据表的信息查询最优的访问机制
1、优化器首先识别WHERE子句与连接条件中包含的列
2、优化器检索这些列上的索引
3、优化器通过从索引上的维护统计来确定子句的选择性以及评估索引的有效性
4、优化器根据前面几个步骤的信息,选择估计开销最低的方式
[sql] view plain copy
DBCC FREEPROCCACHE
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT p.ProductID,p.Name,p.StandardCost,p.Weight,p.Color,p.ProductNumber
FROM Production.Product AS p
WHERE p.ProductID=871
表 'Product'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
这里采用的数据库是微软提供的示例数据库AdventureWorks2008。
WHERE条件里面有ProductID,该字段上面有一个聚簇索引(主键),根据优化器的选择,最终选择该索引
[sql] view plain copy
DBCC FREEPROCCACHE
SET STATISTICS IO ON
SET STATISTICS TIME ON
SELECT pm.Name,p.ProductID,p.Name,p.StandardCost,p.Weight,p.Color,p.ProductNumber
FROM Production.Product AS p
INNER JOIN Production.ProductModel AS pm ON pm.ProductModelID=p.ProductModelID
WHERE p.ProductID=871
表 'ProductModel'。扫描计数 0,逻辑读取 2 次,物理读取 2 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
表 'Product'。扫描计数 0,逻辑读取 2 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。
ProductModelID是ProductModel的主键,也是Product的外键 ,ProductID是Product的主键,查看执行计划从上到下,从右到左。
首先根据ProductID=871查找Product表,这里使用聚簇索引没有问题。
第二部就是ProductModel表,这里根据连接条件来,发现也有可用的聚簇索引,所以上图使用了两个聚簇索引。
(2)、使用窄索引
在实际中,一般使用整形列来作为索引列,像VARCHAR、NVARCHAR等可能会很大,一般不用来作为索引列。
窄索引可以在8KB的索引页面容纳更多的行,这样有许多好处
A、减少IO数量(读取更少的8KB页面)
B、是数据库缓存更有效,SQL Server可以缓存更少的索引页面,从而减少内存中索引页面的逻辑读
C、减少数据库存储空间
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询