SQL Server索引怎么用

什么是索引

拿汉语字典的目录页(索引)打比方:正如汉语字典中的汉字按页存放一样,SQL Server中的数据记录也是按页存放的,每页容量一般为4K 。为了加快查找的速度,汉语字(词)典一般都有按拼音、笔画、偏旁部首等排序的目录(索引),我们可以选择按拼音或笔画查找方式,快速查找到需要的字(词)。

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

•          SQL Server中的数据也是按页( 4KB )存放

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

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

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

 

索引类型

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

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

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

•          非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个

 

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

 

唯一索引:

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

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

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

 

主键索引:

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

 

聚集索引(clustered index

在聚集索引中,表中各行的物理顺序与键值的逻辑(索引)顺序相同。表只能包含一个聚集索引。例如:汉语字(词)典默认按拼音排序编排字典中的每页页码。拼音字母a,b,c,d……x,y,z就是索引的逻辑顺序,而页码1,2,3……就是物理顺序。默认按拼音排序的字典,其索引顺序和逻辑顺序是一致的。即拼音顺序较后的字(词)对应的页码也较大。如拼音“ha”对应的字(词)页码就比拼音“ba” 对应的字(词)页码靠后。实用索引后网站速度变快了

 

非聚集索引(Non-clustered)

如果不是聚集索引,表中各行的物理顺序与键值的逻辑顺序不匹配。聚集索引比非聚集索引(nonclustered index)有更快的数据访问速度。例如,按笔画排序的索引就是非聚集索引,“1”画的字(词)对应的页码可能比“3”画的字(词)对应的页码大(靠后)。

提示: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 

/*--笔试列创建非聚集索引:填充因子为30%--*/

CREATE NONCLUSTERED INDEX IX_writtenExam

     ON stuMarks(writtenExam)

          WITH FILLFACTOR= 30

GO

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

SELECT * FROM stuMarks  (INDEX=IX_writtenExam)

    WHERE writtenExam BETWEEN 60 AND 90

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

 

索引的优缺点

•          优点

–         加快访问速度

–         加强行的唯一性

•          缺点

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

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

 

创建索引的指导原则

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

–         该列用于频繁搜索

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

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

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

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

640?wx_fmt=png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/272535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EF 实现自定义数据库字符串

1、EF模板生成继承DbContext的类文件重新建一个部分类文件避免每次生成实体都会覆盖掉。2、重新构造调用数据库连接字符串的函数VS模板生成示例:public Test_DBEntities(): base("nameTest_DBEntities"){} 重写函数public Test_DBEntities(string conn…

函数及自定义函数

SQL Server中的函数(字符串函数,日期函数,数学函数,系统函数) 字符串函数(用于控制返回给用户的字符串) 1.charindex 寻找一个指定的字符串在另一个字符串中的起始位置 select charindex (JB…

链表定义、链表的插入、链表的删除、链表的查找

链表的定义 链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。它可以根据需要开辟内存单元。链表有一个“头指针”变量,以head表示,它存放一个地址。该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包括两…

原神服务器维护后抽奖池会更新吗,原神:武器池改动,玩家的诉求再次得到反馈!PS端将与官服互通!...

大伙直播都看了吗?反正我看完了。现在满脑子都是大伟哥的嗯典。这好吗?这不好。但是没有关系,内容还是有的。首先,剧情上的雷神确立了,就是这位大姐。(好像有什么锋利的东西悬在了我的头顶,不过这上面&…

EF性能优化(一)

1、EF SQL监控工具目前采用SQLServer 自带的SQL Server Profiler来监控执行的sql,或者采用第三方插件MiniProfiler,具体用法可以网上查一下。2、EF使用SQlQuery 直接写sqlEF效率低于ADO.NET是因为LINQ-TO-SQL的过程消耗了时间。而使用SqlQuery则可以直接…

解决Genymotion下载设备失败的方法(Connection Timeout)

一直下载不下来,报错。 解决办法: 打开 C:\Users\用户名\AppData\Local\Genymobile目录 打开genymotion.log文件,在里面最下面几行,找到如下日志 [Debug] Downloading file "http://files2.genymotion.com/dists/4.4.4/ova/…

寻仙服务器要维护多久,寻仙手游几天开一个区

摘要寻仙手游最新开服时间表IOS和安卓,寻仙手游什么时候新增开服,开服时间公告。我们将于8月17日(周四)凌晨5:00-9:00对全服进行停机更新,请您提前保存游戏进程,安全下线。听到很多小伙伴都在讨论寻仙手游几天开一个区&#xff0c…

Linux常用初级指令介绍

touch 文件名 ------可创建一个文件(白色的字体)rm * -rf -------删除当前路径下的全部文件Ctrlc :----强行终止当前程序Ctrld -----退出终端Ctrls ----暂停当前程序,然后按下任意键恢复运行Ctrlz ----将当前程序放在后台运行,回…

如何写出安全的API接口

通过园友们的讨论,以及我自己查了些资料,然后对接口安全做一个相对完善的总结,承诺给大家写个demo,今天一并放出。对于安全也是相对的,下面我来根据安全级别分析1.完全开放的接口有没有这样的接口,谁都可以…

Linux系统文件编程(1)

打开文件 int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);open----返回的是文件描述符是整形数(文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维…

【收集】常用的cmd命令

运行操作CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本)CMD命令锦集1. gpedit.msc-----组策略2. sndrec32-------录音机3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS 服务器是…

MVC框架详解--Servlet+JSP+JavaBean模式(MVC)开发复杂的web应用

孤傲苍狼 javaweb学习总结(二十二)——基于ServletJSPJavaBean开发模式的用户登录注册 转载于:https://www.cnblogs.com/yangjj08/p/10153657.html

Linux文件编程(2)

文件打开创建补充 &#xff08;1&#xff09;O_EXCL O_EXCL和O_CREAT配合使用 若文件不存在则创建文件 若文件存在则返回-1 代码演示 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> int main() {int fd;fdope…

IT技术人员必须思考的几个问题

1.搞IT的是屌丝、码农、程序猿?人们提到IT人的时候&#xff0c;总会想到他们呆板、不解风情&#xff0c;专注于IT技术&#xff0c;就算性感的美女躺在旁边也无动于衷。事实真的是这样吗?虽说不能完全否定有这样的情况存在&#xff0c;但这是IT人普遍的特点吗?而其它行业也有…

37个JavaScript基本面试问题和解答

https://www.zcfy.cc/article/37-essential-javascript-interview-questions-and-answers1、使用typeof bar “object”来确定bar是否是一个对象时有什么潜在的缺陷&#xff1f;这个陷阱如何避免&#xff1f;尽管typeof bar “object”是检查bar是否是对象的可靠方法&#xff0…

封装cookie.js、EventUtil.js、

最近学习了javascript&#xff0c;封装好的东西看起来舒服&#xff0c;以备需要的时候拉出来&#xff0c;jquery对javascript做了很好的封装&#xff01;以后会多用jquery多些var CookieUtil {get: function (name){var cookieName encodeURIComponent(name) "",c…

实现linux cp 命令和修改配置文件

cp指令用来代码的拷贝 以下由文件编程代码实现 代码演示 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main(int argc…

最实用前端开发框架对比评测

现在&#xff0c;各种开发框架层出不穷&#xff0c;但是&#xff0c;真正的精品却为数不多。今天我们根据Github上的流行程度整理了2014年最受欢迎的5个前端开发框架&#xff0c;并进行对比说明&#xff0c;希望帮助有需要的朋友选择合适自己的前端框架。1. BootstrapBootstrap…

HBase1.0.0 实现数据增删查

HBase1.0.0 即Hadoop 2.6 采用maven 的方式实现HBase数据简单操作 import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.a…

linux 写结构体到文件

将整数写入到文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include<stdio.h> #include <unistd.h> #include <string.h>#include <stdlib.h> int main() {int fd;int data100;int data20;fdopen("…