网站首页 > 文章中心 > 其它

sqlserver做索引

作者:小编 更新时间:2023-08-11 14:30:58 浏览量:24人看过

认识SQLServer索引以及单列索引和多列索引的不同

千万级别数据表,单列索引和多列索引性能对比

由于Contact表存在多个(单列)索引,造成Delete ,update ,insert操作时需要花费大量的时间删除索引和重建索引.

通过把多个(单列)索引合并成一个(多列)索引后,测试得出Delete ,update ,insert操作时需要花费的时间大大缩短.

由于多个(单列)索引合并成一个(多列)索引,可能会对之前单列索引字段的查询性能有影响,做了对比测试.

下面连接有个详细的对比数据性能表:

SQLSERVER对索引的利用及非SARG运算符认识

写SQL语句的时候很多时候会用到filter筛选掉一些记录,SQL对筛选条件简称:SARG(search

argument/SARG)

复制代码

代码如下:

where

and

当然这里不是说SQLSERVER的where子句,是说SQLSERVER对索引的利用在SQLSERVER对于没有SARG运算符的表达式,索引是没有用的,SQLSERVER对它们很难使用比较优化的做法.

意思是说,如果你的SQL语句中没有where子句包括非SARG运算符,那么你的SQL语句是不会用到表格中的索引的

下面说一下哪些是非SARG运算符:

非SARG运算符包括

NOT、

NOT

EXISTS、

IN、

LIKE

规律就是有"NOT"

关键字

或者

不等于的意思

基本上利用不了索引

还有一些内部函数,如果使用这些内部函数SQLSERVER也不会用到索引

内部函数,例如:CONVERT(),UPPER()等

SQL 创建索引的目的是什么?

第一段:SQL创建索引的目的如下:

①.、通过唯一性索引(unique)可确保数据的唯一性;

第二段:创建SQL索引的语法:

CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED](索引类型) INDEX 索引名 ON 表名(列名 [ASC|DESC] [, 列名[ASC|DESC]...]).

扩展资料:

索引的类别介绍:

①.、唯一索引:

唯一索引是不允许其中任何两行具有相同索引值的索引.当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存.数据库还可能防止添加将在表中创建重复键值的新数据.

数据库表经常有一列或多列组合,其值唯一标识表中的每一行.该列称为表的主键.在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型.该索引要求主键中的每个值都唯一.当在查询中使用主键索引时,它还允许对数据的快速访问.

sqlserver 怎么建索引

操作 1、

创建聚集索引

方法 1、

alter table table_name add constraint cons_name priamry key(columnName ASC|DESC,[.....]) with (drop_existing = on);

alter table Employee

add constraint PK_for_Employee primary key clustered (ID);

go

这个是一种特别的方法,因为在定义主键的时候,会自动添加索引,好在加的是聚集索引还是非聚集索引是我们人为可以控制的.

通过sp_helpindex 可以查看表中的索引

execute sp_helpindex @objname = 'Employee';

如何创建SqlServer视图的索引

这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益.在视图上创建的第一个索引必须是唯一聚集索引.在创建唯一聚集索引后,可创建其它非聚集索引.视图上的索引命名规则与表上的索引命名规则相同.唯一区别是表名由视图名替换.(Sql Server联机帮助)

语句:Create VIEW vXXX WITH SCHEMABINDING AS......

Create UNIQUE CLUSTERED INDEX idxXXX ON vXXX(cXXX)

一个标准视图转换为一个索引视图必须遵守以下规则:

A.视图必须使用With Schemabinding选项来创建;

如果创建视图时没有with Schemabinding,试图创建视图时就会报错:......因为该视图未绑定到架构

B.在这个视图中不能使用其他视图、导出表、行集函数或自查询,也就是说只能使用表;

C.视图所用到的基本表必须和视图属于同一个所有者;

D.视图只能链接同一个数据库中的表;

E.视图不能包含一个外部链接或自链接,也就是说在链接表时只能使用INNER JOIN并且INNER JOIN前后不能使同一个表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;

F. 视图不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct关键字;

G. 视图不允许使用某些集合函数,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;

H. 视图不能使用Select * 这样的语句,也就是说视图的所有字段都必须显示指定;

I. 视图不能包含Text、ntext、image类型的列;

J. 如果视图包含一个Group By子句,那么他必须在Select列中包含count_big(*);

K. 视图中的所有标和用户自定义的函数都必须使用两段式名来引用,即所有者.表或函数名称;

L. 所有的基本表和视图都必须使用 Set Ansi_Nulls On 创建;

M. 在创建索引时或创建索引后执行IUD时,必须显示或隐式地执行:

Set ANSI_NULLS ON

SET ANSI_PADDING ON

SET ANSI_WARNINGS ON

SET ARITHABORT ON

SET CONCAT_NULL_YIELDS_NULL ON

SET QUOTED_IDENTIFIER ON

SET NUMERIC_ROUNDABORT OFF

各个选项的有关信息或意义,可以查阅SQL Server的联机丛书,这里就不再介绍了;

sqlserver怎么建立索引

什么是索引

同理,SQL Server允许用户在表中创建索引,指定按某列预先排序,从而大大提高查询速度.

索引:是SQL Server编排数据的内部方法.它为SQL Server提供一种方法来编排查询数据.

索引页:数据库中存储索引的数据页;索引页类似于汉语字(词)典中按拼音或笔画排序的目录页.

索引的作用:通过使用索引,可以大大提高数据库的检索速度,改善数据库性能.

索引类型

唯一索引:唯一索引不允许两行具有相同的索引值

主键索引:为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的每个值是唯一的,并且不能为空

聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个

索引类型:再次用汉语字典打比方,希望大家能够明白聚集索引和非聚集索引这两个概念.

唯一索引:

唯一索引不允许两行具有相同的索引值.

如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保存.当新数据将使表中的键值重复时,数据库也拒绝接受此数据.例如,如果在stuInfo表中的学员员身份证号(stuID) 列上创建了唯一索引,则所有学员的身份证号不能重复.

提示:创建了唯一约束,将自动创建唯一索引.尽管唯一索引有助于找到信息,但为了获得最佳性能,建议使用主键约束或唯一约束.

主键索引:

在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型.主键索引要求主键中的每个值是唯一的.当在查询中使用主键索引时,它还允许快速访问数据.

聚集索引(clustered index)

非聚集索引(Non-clustered)

提示:SQL Server中,一个表只能创建1个聚集索引,多个非聚集索引.设置某列为主键,该列就默认为聚集索引

如何创建索引

使用T-SQL语句创建索引的语法:

CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED]

INDEX index_name

ON table_name (column_name...)

[WITH FILLFACTOR=x]

q UNIQUE表示唯一索引,可选

q CLUSTERED、NONCLUSTERED表示聚集索引还是非聚集索引,可选

q FILLFACTOR表示填充因子,指定一个0到100之间的值,该值指示索引页填满的空间所占的百分比

在stuMarks表的writtenExam列创建索引:

USE stuDB

GO

IF EXISTS (SELECT name FROM sysindexes

WHERE name = 'IX_writtenExam')

DROP INDEX stuMarks.IX_writtenExam

CREATE NONCLUSTERED INDEX IX_writtenExam

ON stuMarks(writtenExam)

/*-----指定按索引 IX_writtenExam 查询----*/

SELECT * FROM stuMarks (INDEX=IX_writtenExam)

虽然我们可以指定SQL Server按哪个索引进行数据查询,但一般不需要我们人工指定.SQL Server将会根据我们创建的索引,自动优化查询.

索引的优缺点

优点

– 加快访问速度

– 加强行的唯一性

缺点

– 带索引的表在数据库中需要更多的存储空间

– 操纵数据的命令需要更长的处理时间,因为它们需要对索引进行更新

创建索引的指导原则

请按照下列标准选择建立索引的列.

– 该列用于频繁搜索

– 该列用于对数据进行排序

请不要使用下面的列创建索引:

– 列中仅包含几个不同的值.

– 表中仅包含几行.为小型表创建索引可能不太划算,因为SQL Server在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长

以上就是土嘎嘎小编为大家整理的sqlserver做索引相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章