- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库表优化之索引 主讲人: 张延明 数据库存储结构(页和区) 要想做好索引优化,知道索引的存储结构是至关重要的 SQL Server最小的存储单位是页(Page),一个页的大小是8K=8192字节。一个数据页是由3部分组成:页头、数据行和行偏移矩阵,页是可以读写的最小I/O单位 SQL Server基于页之上做了另外一种逻辑分组,它将8个物理上连续的页分为一个区 索引 什么是索引:索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 结构上来说索引有两种:聚集索引和非聚集索引,索引主要目的是提高了SQL?Server系统的性能,加快数据的查询速度与减少系统的响应时间? 聚集索引(clustered index) 指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况 非聚集索引(nonclustered index) 指索引的逻辑顺序与磁盘上行的物理存储顺序不同 聚集索引 vs 非聚集索引 字典的例子:聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致, 如果按照拼音查询,那么都是从a-z的,是具有连续性的,a后面就是b,b后面就是c,?聚集索引就是这样的,他是和表的物理排列顺序是一样的,例如有id为聚集索引,那么1后面肯定是2,2后面肯定是3,所以说这样的搜索顺序的就是聚集索引。 非聚集索引就和按照部首查询是一样是,可能按照偏房查询的时候,根据偏旁‘弓’字旁,索引出两个汉字,张和弘,但是这两个其实一个在100页,一个在1000页,(这里只是举个例子),他们的索引顺序和数据库表的排列顺序是不一样的,这个样的就是非聚集索引。 创建索引 ?创建索引的语法: CREATE?[UNIQUE][CLUSTERED?|?NONCLUSTERED]??INDEX??index_name?? ON?{table_name?|?view_name}?[WITH?[index_property?[,n]] 说明: UNIQUE:?建立唯一索引。 CLUSTERED:?建立聚集索引。 NONCLUSTERED:?建立非聚集索引。 Index_property:?索引属性。 ?UNIQUE索引既可以采用聚集索引结构,也可以采用非聚集索引的结构,如果不指明采用的索引结构,则SQL?Server系统默认为采用非聚集索引结构。 ?删除索引语法: DROP?INDEX?table_name.index_name[,table_name.index_name] 说明:table_name:?索引所在的表名称。 index_name?:?要删除的索引名称。 联合索引 与 单一列的索引 单一索引:create unique clustered index person_id on person (id) 联合索引:create index person_name on person (last_name, first_name) 单一索引:只要条件列中出现索引列,无论在什么位置,都能利用索引查询 联合索引: 1. 查询条件中出现联合索引第一列,或者全部,则能利用联合索引. 2. 条件列中只要条件相连在一起,无论前后,都会利用上联合索引 3. 查询条件中没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,都不会利用联合索引查询 实例 create table person (id int, last_name varchar(30), first_name varchar(30)) create index person_name on person (last_name, first_name) --第一种情况:–条件和输出列和索引列顺序相同 select last_name,first_name from person where last_name=1 and first_name=1 2. --第二种情况:–条件列与索引列顺序不同,但输出列相同 select last_name,first_name from person where first_name=1 and last_name=1‘ 3. --第三种情况:–条件列与输出列与索引列的顺序都不相同 select first_name,last_name from person where first_name=1 and last_name=1‘ 4. --第四种情况:–条件列在first_name和last_name中间加入
文档评论(0)