博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql索引优化 (从网上学习的时候总结的)
阅读量:4513 次
发布时间:2019-06-08

本文共 2497 字,大约阅读时间需要 8 分钟。

SQL索引优化 

在数据库存优化设计中往往会提到索引,这编文章就来详细的说明一下在 SQL SERVER 下面的建立索引的技巧和需要注意的一些地方,让您可以更直观的了解数据库的结构。

往往在数据量比较小,查询量也不是很大的时候我们往往会忽视索引的存在。

总结优化如下:

1、主键就是聚集索引
2、只要建立索引就能显著提高查询速度
3、把所有需要提高查询速度的字段都加进聚集索引,以提高查询速度
其他书上没有的索引使用经验总结
1、用聚合索引比用不是聚合索引的主键速度快
2、用聚合索引比用一般的主键作order by时速度快,特别是在小数据量情况下
3、使用聚合索引内的时间段,搜索时间会按数据占整个数据表的百分比成比例减少,而无论聚合索引使用了多少个
4 、日期列不会因为有分秒的输入而减慢查询速度
其他注意事项
1. 不要索引常用的小型表
2. 不要把社会保障号码(SSN)或身份证号码(ID)选作键
3. 不要用用户的键
4. 不要索引 memo/notes 字段和不要索引大型文本字段(许多字符)
5. 使用系统生成的主键

改善SQL语句

1、Like语句是否属于SARG取决于所使用的通配符的类型

2、or 会引起全表扫描
3、非操作符、函数引起的不满足SARG形式的语句
4、IN 的作用相当与OR
5、尽量少用NOT
6、exists 和 in 的执行效率是一样的
7、用函数charindex()和前面加通配符%的LIKE执行效率一样
8、union并不绝对比or的执行效率高
9、字段提取要按照“需多少、提多少”的原则,避免“select *”
10、count(*)不比count(字段)慢
11、order by按聚集索引列排序效率最高
12、高效的TOP

 

特点:

SQL中的聚集索引和非聚集索引的区别

1.直接创建索引和间接创建索引

    直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)

    间接创建索引:  定义主键约束或者唯一性键约束,可以间接创建索引

     2.普通索引和唯一性索引

    普通索引:

        CREATE INDEX mycolumn_index ON mytable (myclumn)

    唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用

              CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

     3.单个索引和复合索引

    单个索引:即非复合索引

    复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名,最多16个字段

        CREATE INDEX name_index ON username(firstname,lastname)

  4.聚簇索引和非聚簇索引(聚集索引,群集索引)

    聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列

        CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH

        ALLOW_DUP_ROW(允许有重复记录的聚簇索引)

    非聚簇索引:

        CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

索引的使用

1.当字段数据更新频率较低,查询使用频率较高并且存在大量重复值是建议使用聚簇索引
2.经常同时存取多列,且每列都含有重复值可考虑建立组合索引
3.复合索引的前导列一定好控制好,否则无法起到索引的效果。如果查询时前导列不在查询条件中则该复合索引不会被使用。前导列一定是使用最频繁的列
  4有大量重复值、且经常有范围查询(between, >,< ,>=,< =)和order by、group by发生的列,可考虑建立群集索引;

  5经常同时存取多列,且每列都含有重复值可考虑建立组合索引;

6组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。

7. in 、 or 子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引。

8. 任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边。

 

索引的优缺点

 ?          优点

 –         加快访问速度

 –         加强行的唯一性

 ?          缺点

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

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

 

创建索引的指导原则

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

2.该列用于频繁搜索

3.该列用于对数据进行排序

4.不要设置过多的索引,在没有聚集索引的表中,最大可以设置249个非聚集索引,过多的索引首先会带来更大的磁盘空间,而且在数据发生修改时,对索引的维护是特别消耗性能的。

5. 避免对不常用的列,逻辑性列,大字段列创建索引。

6.不要索引数据量不大的表,对于小表来讲,表扫描的成本并不高。

 

 

铁律

铁律一:天下没有免费的午餐,使用索引是需要付出代价的。

铁律二:对于查询中很少涉及的列或者重复值比较多的列,不要建立索引。

1:不经常使用的列,这种索引带来缺点远大于带来的优点。

2:逻辑性的字段,例如性别字段等等,匹配的记录太多,和表扫描比起来不相上下。

3:字段内容特别大的字段,例如text等,这会大大增大索引所占用的空间以及索引更新时的速度。

铁律三:对于按范围查询的列,最好建立索引。

铁律四:表中若有主键或者外键,一定要为其建立索引。

铁律五:对于一些特殊的数据类型,不要建立索引。

铁律六:索引可以跟Where语句的集合融为一体。

 

转载于:https://www.cnblogs.com/xiaodaniu/archive/2012/10/18/2728875.html

你可能感兴趣的文章
arguments.callee
查看>>
MySQL命令行查询乱码解决方法:
查看>>
xlwt 模块 操作excel
查看>>
Delphi中纤程的使用
查看>>
(第二周)词频统计初版
查看>>
jQuery的ajax传参巧用JSON
查看>>
数据库中使用自增量字段与Guid字段作主键的性能对比(补充篇)-----转
查看>>
Thinkphp3.2 cms之角色开发
查看>>
windows批量创建用户
查看>>
jquery 时间运算、格式化的方法扩张
查看>>
WebSocket与消息推送
查看>>
paip.中文 分词 ---paoding 3.1 的使用
查看>>
mysql中 DateDiff(date1, date2)函数的第一个参数需比第二个参数晚
查看>>
mybatis--面向接口编程
查看>>
保护您眼睛视力 请对Win7/Vista/xp作如下设置
查看>>
Oracle 统计信息窗口的相关知识
查看>>
Pollard-Rho大整数拆分模板
查看>>
uva11429(生成随机数 期望)
查看>>
sublime 安装ctags跳转以及跳转快捷键
查看>>
Unity3D的单例模式
查看>>