VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 数据库 > sql数据库 >
  • sql语句大全之数据库调优笔记

一、建立索引

   1.在经常要查询的列或者做where条件的列上建立索引可以避免扫描整个表。

2.当一列的值都不同时,也就是当“这一列不重复的值得数量/这一列的行数“的值”越接近1就越适合在这一列上建立索引,例如姓名、id每一行的值基本都不同,又例如性别只有两种结果每一行基本相同,所以适合在id、姓名的列上索引,不适合在性别列上加索引。

总结上两条就是在经常做条件表达式和不同值较多的列上建立索引。

3.频繁做更新、删除的表不要建立过多的索引,因为当你对表进行操作时同时也需要维护索引。

4.对没有重复值的列创建唯一索引比创建非唯一索引更好。

5.定义主键的列一定要建立索引,定义有外键的列一定要建立索引。

6.经常同时存取多列,且每列都含有重复值,可考虑复合索引将使用频度高的字段放在前面

7.在order by、group by、distinct关键字后面的列上建立索引,如果是复合索引,索引的字段顺序要和关键后面的字段顺序一致,否则索引不会被使用。

8.当数据库表更新大数据后,删除并重建索引来提高查询速度。

9.如果索引列是函数的参数,索引不会被使用。

10.hash join 由于必须做hash运算,索引的存在对数据查询速度几乎没有影响。

11.并行查询不会用到索引。

12.索引中存储值不能为全空。

13.尽量使用交窄的索引,这样数据页每页上能因存放较多的索引行而减少操作。

二、sql语句优化

1.同一个表有多个条件时,影响较大的条件放前面,影响较弱的放后面。这样就可以先筛选掉大部分数据再去找到满足条件的数据。

2.字段用多少去多少,避免select*这样的操作。当表中有很多列时,select*就会很耗时。

3.避免子查询,能用连接代替子查询的就用连接。因为对于主查询的每一条记录子查询都要执行一次,嵌套的层次越多效率越低。

  4.避免使用!=(或<>)、IS NULL 或IS NOT NULL、IN、NOT IN等这样的操作符,避免在WHERE 子句中使用非聚合表达式。这些操作符会使系统无法使用索引。

  5.避免使用or,用union代替。or语句的执行原理是先找到满足每个or子句条件的行存放到临时表里,再创建唯一索引去掉重复行,最后得到结果。使得索引可能失效,导致顺序扫描整个表。

6.在执行连接前,对关系进行适当的预处理,预处理的方法有两种,在连接属性上建立索引和对关系进行排序。

7.将一个大的查询拆分成多步执行查询。

8.如果应用程序使用循环,可考虑在查询内放入循环。

 

相关教程