sqlserver查看创建的索引(浅述SQL Server的聚焦强制索引查询条件和Columnstore Index)
sqlserver查看创建的索引
浅述SQL Server的聚焦强制索引查询条件和Columnstore Index前言
本节我们再来穿插讲讲索引知识,后续再讲数据类型中的日期类型,简短的内容,深入的理解。
强制索引查询条件
前面我们也讲了一点强制索引查询的知识,本节我们再来完整的讲述下
(1)SQL Server使用默认索引
USE TSQL2012 GO SELECT * FROM Sales.Orders
上述就不用我再啰嗦了,使用默认主键创建的聚集索引来执行查询执行计划。
(2)SQL Server使用强制索引
USE TSQL2012 GO SELECT custid FROM Sales.Orders WITH(INDEX(idx_nc_custid))
(3)SQL Server使用内联查询条件
USE TSQL2012 GO SELECT custid FROM Sales.Orders WITH (INDEX(idx_nc_custid)) INNER JOIN Sales.OrderDetails WITH (INDEX(PK_OrderDetails)) ON Sales.OrderDetails.orderid = Sales.Orders.orderid GO
(4)SQL Server使用OPTION
上述我们第三个使用内联查询是比较好的,同时我们可以在表连接中末尾使用OPTION来强制使用索引,因为涉及到表连接,我们会用到另外一个函数Hints。该Hints用在Join Hints、Query Hints、Table Hints。如果我们指定用Hints很明显将覆盖查询计划,因为将SQL Server默认在查询上会使用最优查询,此时通过Hints将可能会覆盖最优查询,所以一般不推荐使用,只对于明确知道这样做会比默认查询计划会更好的有丰富经验的SQL Server使用者可能会是好的解决方案。但是对于OPTION我们可以使用,OPTION才SQL Server 2008+上才有,上述第三个强制使用内联查询提示可以通过OPTION结合Hints来完成。
USE TSQL2012 GO SELECT custid FROM Sales.Orders AS SO INNER JOIN Sales.OrderDetails AS SOD ON SOD.orderid = SO.orderid OPTION (TABLE HINT(SO,INDEX(idx_nc_custid)),TABLE HINT(SOD, INDEX(PK_OrderDetails))) GO
上述不推荐使用,除非你明确这样做比默认使用最优执行查询计划更好。
Columnstore Index
列存储索引出现在SQL Server 2012+上,我们本节简单说说这个内容,对于大数据方面合理使用列存储索引能够提高查询性能,但是通过查找大量资料发现在SQL Server 2012中使用列存储索引有诸多限制并且还会出现许多问题,而在SQL Server 2014+上这样的问题得到了很大的改善,所以不建议在SQL Server 2012中使用列存储索引,要使用可以在 SQL Server 2014+上使用。
当我们在SQL Server 2012中创建索引会提示有Columnstore Index和NONCLUSTERED COLUMNSTORE INDEX。在数据库中存储数据分为两种,一种是行存储,另外一种则是列存储,行存储是在页上存储所有行数据,而列存储则是在相同页上存储一列所有数据,所以利用列存储查找数据会更加快而不是查找整行上的所有数据,当然这也就意味着查找速度的增加而导致的则是硬件驱动配置需要有更高的要求,列存储中的索引会进行压缩,所以要使用列存储需要更大的内存。列存储索引存储每一列数据在每一组单独的磁盘页中,而不是在每页上存储多行,它和行存储存储数据区别在于如下图
这里关于例子就不再给出,算是做一个基本了解吧。
总结
本节我们主要讲了强制使用索引条件来进行查询,当对于使用默认创建索引进行查询计划时觉得不是最优解,可以尝试使用强制索引来进行对比找出更好得解决方案。简短的内容,深入的理解,我们下节再会。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,同时也希望多多支持开心学习网!
- mysql 建表命令注释(mysql alter table命令修改表结构实例详解)
- mysql数据库下载安装步骤(MySQL数据库压缩版本安装与配置详细教程)
- sql查看数据库所有表名(SQL提取数据库表名及字段名等信息代码示例)
- sql server 分布式事务(Sql Server事务语法及使用方法实例分析)
- navicatformysql使用视图(Navicat for MySQL的使用教程详解)
- mysql删库操作记录(mysql常用sql与命令之从入门到删库跑路)
- sql语句按字段排序(SQL语句实现表中字段的组合累加排序)
- mysql中基本语句(MySQL中explain语句的基本使用教程)
- 数据库的sql语句怎么写(数据库常用的sql语句汇总)
- oracle和mysql查询所有表(Oracle、MySQL和SqlServe三种数据库分页查询语句的区别介绍)
- mysql存储过程遍历数据(Mysql 存储过程中使用游标循环读取临时表)
- sqlserver拒绝访问怎么办(SQL server服务显示远程过程调用失败的解决方法)
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- 终于有人将mysql 索引讲清楚了(MySQL 索引的一些细节分享)
- mysql数据表的创建与管理(MySQL数据操作-DML语句的使用)
- 数据库sql位置更换磁盘(SQL SERVER迁移之更换磁盘文件夹的完整步骤)
- 王牌部队,你看的剧情我看的时尚(你看的剧情我看的时尚)
- 被鉴定的古董价值300万 当心,你可能遇到诈骗了(被鉴定的古董价值300万)
- 英语难学吗(初中英语难学吗)
- 如何追女孩子(如何追女孩子的技巧和方法)
- 是不是快乐全被你拿走了(而是你得到的)
- 世界上只有妈妈好(世界上只有妈妈好的歌词)
热门推荐
- ASP.NET服务器端执行脚本的通用方法
- sublime text 快捷键
- 织梦dedecms专题页制作详细教程(dedecms教程之dedecms生成速度提速的方法)
- css3独有属性(CSS3 calc会计算属性详解)
- dockerjenkins最新消息(新手必看docker安装jenkins详细教程)
- pyqt5怎么在pycharm中安装(pycharm+PyQt5+python最新开发环境配置踩坑)
- idea发布项目在tomcat哪个目录下(idea发布web项目后Tomcat服务器找不到该项目的问题及解决方法)
- docker正常容器启动失败(Docker容器无法停止删除的解决方案)
- 宝塔面板必须安装哪些软件(宝塔面板安装后必要的安全设置说明)
- SqlServer2016模糊匹配的三种方式及效率问题简析(SqlServer2016模糊匹配的三种方式及效率问题简析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9