开发者社区> 技术mix呢> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

你必须知道的Microsoft SQL Server一

简介:
+关注继续查看

不知道为什么我Win10环境下安装的Sqlserver2012,智能提示的功能基本上没有用,没办法,我还是选择安装插件SQL Prompt 5吧。下载地址:http://www.uzzf.com/soft/95310.html

有人反映SQL Prompt 5 书写SQL代码时出现双重提示(Prompt和Transact-SQL IntelliSense),觉得很是别扭,可以在设置中发现关闭Transact-SQL IntelliSense。

具体设置步骤:“工具”->“选项”->在选项窗口中找到“文本编辑器”->“Transact-SQL”->“IntelliSense”->取消右侧“启用IntelliSense(E)”前面的勾,重新开启MS SQL Manage Studio即可

下面为配置图:

以Northwind数据库为例。

SQL Server 数据库动态索引查找原理——索引查找原理

所谓的动态索引查找就是SQL Server在执行语句的时候,才格式化查询条件,然后根据查询条件的不同自动的去匹配所有项,从而达到性能提升的目的。

假设我们执行如下SQL语句:

select * from [dbo].[Orders] where ShipPostalCode in('90110','01307');

我们来查看SQL执行计划,这里有两种方式。

方式一是直接在SQL语句前面输入如下脚步:

set showplan_text on
GO

方式二,查询——查询选项——高级

按F5执行SQL语句,运行结果如下所示。

文本内容如下:

  |--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]), WHERE:([Northwind].[dbo].[Orders].[ShipPostalCode]=N'01307' OR [Northwind].[dbo].[Orders].[ShipPostalCode]=N'90110'))

点中工具栏的“包括实际的执行计划”按钮,可以查看执行计划如下图所示。

我们会看到,执行计划进行了索引扫描,索引扫描是SQL Server最优的查询方式。实际上,Sqlserver 自动将我们之前写的SQL语句中的IN操作直接修改为了OR查询操作。

 我们再来看如下SQL:

复制代码
use Northwind
GO

DECLARE @p1 NVARCHAR(20),@p2 NVARCHAR(20)
SELECT @p1=N'90110', @p2=N'01307'

SELECT * FROM dbo.Orders WHERE ShipPostalCode IN(@p1,@p2)
复制代码

查看执行计划其执行结果和之前的SQL语句一模一样。

  |--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]), WHERE:([Northwind].[dbo].[Orders].[ShipPostalCode]=[@p2] OR [Northwind].[dbo].[Orders].[ShipPostalCode]=[@p1]))

在Sqlserver2012之前,其执行计划是不一样的,这是因为Sqlserver2012自动帮我们做了优化。

所以有时候,我们会发现,即便我们的SQL语句写得很烂,但是却发现怎么执行起来一点都不卡啊,那是因为sqlserver的执行计划,进行了自动优化,但是我们还是要知道其原理,尽量写高性能的SQL语句。

本文转自邹琼俊博客园博客,原文链接:http://www.cnblogs.com/jiekzou/p/6105023.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
sqlServer存储过程
1、创建存储过程报错:     'CREATE/ALTER PROCEDURE' 必须是查询批次中的第一个语句。 解决方法: use databaseName 后面要加上一句: GO ...
824 0
SQL Server基础之<存储过程>
原文:SQL Server基础之   简单来说,存储过程就是一条或者多条sql语句的集合,可视为批处理文件,但是其作用不仅限于批处理。本篇主要介绍变量的使用,存储过程和存储函数的创建,调用,查看,修改以及删除操作。
1471 0
SQLSERVER存储过程语法详解
SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ]     [ { @parameter data_type }         [ VARYING ] [ = default ] [ OUTPUT ]     ] [ ,...n ]   [ WITH     { RECOMPILE | ENCRY
1658 0
SQL Server里的 ISNULL 与 NULLIF
SQL Server 中有两个参数,语法:     ISNULL(check_expression, replacement_value) check_expression 与 replacement_value 数据类型必须一致     如果 check_expression 为 ...
685 0
SQL Server的聚集索引和非聚集索引的的创建和区别以及相关问题
以前很少关注索引这个东西,因为这个是DBA关注的,最近看书看了一下索引 ,把一些以前不太注意的的记录一下 下面这个表格是摘自:http://www.cnblogs.com/tuyile006/archive/2009/08/28/1555615.
931 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
SQL Server 2017
立即下载
SQL Sever迁移PG经验
立即下载
SQL Server在电子商务中的应用与实践
立即下载