序言 索引的概念 索引是什么 数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书.在数据库中,数据库程序使用索引可以快速查询到表中的数据,而不必扫描整个表.书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表. 例如:数据库中有20000条记录,现在要执行这样一个查询:SELECT * FROM tableName WHERE num=10000.如果没有索引,必须遍历整个表,直到num=10000的这一行为止:…
最近一个项目,涉及到sql server 2008,因为业务需求,希望建立一个唯一索引,但是发现在sql server中,唯一索引字段不能出现多个null值,下面是报错信息: CREATE UNIQUE NONCLUSTERED INDEX weixin_openid_ui ON Users(weixin_openid); 因为发现对象名称 'dbo.Users' 和索引名称 'weixin_openid_ui' 有重复的键,所以 CREATE UNIQUE INDEX 语句终止.重复的键值为…
SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致执行计划从索引查找(Index Seek)变为索引扫描(Index Scan) Implicit Conversion will cause index scan instead of index seek. While implicit conversions occur in SQL Serve…
查询某个表是否存在: 在实际应用中可能需要删除某个表,在删除之前最好先判断一下此表是否存在,以防止返回错误信息.在SQL SERVER中可通过以下语句实现: IF OBJECT_ID(N'表名称', N'U') IS NOT NULL DROP TABLE 表名称; 注意,普通表和临时表的使用差别: 若希望删除TEST库中的dbo.TestTable表,直接将dbo.TestTable作为表名即可. 若希望删除临时表dbo.#temp_table,需要以tempdb.dbo.#temp_tab…
原文:SQL Server的非聚集索引中会存储NULL吗? SQL Server的非聚集索引中会存储NULL吗? 这是个很有意思的问题,下面通过如下的代码,来说明,到底会不会存储NULL. --1.建表 if OBJECT_ID('t1') is not null drop table t1 go create table t1 ( id int primary key, v varchar(20) ) insert into t1 select 1 ,'aa' union all select…