视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
数据库优化原则
2020-11-09 14:08:49 责编:小采
文档


最近数据库课程设计,我总结了一下数据库的优化方法,希望对有需要的人能有帮助: 1.对查询进行优化,尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索

最近数据库课程设计,我总结了一下数据库的优化方法,希望对有需要的人能有帮助:
1.对查询进行优化,尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
 select id from p where num is null
  可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
 select id from p where num=0

3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:

 select id from p where num=8 or num=12
  可以这样查询:
 select id from p where num=8
   union all
   select id from p where num=12
5.in 和 not in 也要慎用,否则会导致全表扫描,如:
 select id from p where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
 select id from p where num between 1 and 3
6.下面的查询也将导致全表扫描:
  select id from p where name like '%abcd%'
  若要提高效率,可以考虑全文检索。

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:

 select id from p where num=@number
可以改为强制查询使用索引:
 select id from p with(index(索引名)) where num= @number
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
 select id from t where num/2=10
应改为:
select id from t where num=10*2
9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
  select id from t where datediff(day,createdate,'2014-12-30')=0--‘2014-12-30’生成的id

10.主键是必要的,SQL SERVER的主键同时是一个唯一索引,而且在实际应用中,我们往往选择最小的键组合作为主键,所以主键往往适合作为表的聚集索引。在有多个键的表,主键的选择也比较重要,一般选择总的长度小的键,小的键的比较速度快,同时小的键可以使主键的B树结构的层次更少。主键的选择还要注意组合主键的字段次序,对于组合主键来说,不同的字段次序的主键的性能差别可能会很大,一般应该选择重复率低【本文来自鸿网互联 (http://www.68idc.cn)】、单独或者组合查询可能性大的字段放在前面。

11.数据类型尽量用数字型,数字型的比较比字符型的快很多。

12.数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的。

13.尽量不要允许NULL,除非必要,可以用默认值代替。

14.少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用。

15.自增字段要慎用,不利于数据迁移。

16.适用文件组可以有效把I/O操作分散到不同的物理硬盘,提高并发能力。

17.一个表不要加太多索引,因为索引影响插入和更新的速度。

18.适当的使用冗余的反范式设计,以空间换时间有的时候会很高效。

19.联表查询的时候,记得把小结果集放在前面,遵循小结果集驱动大结果集的原则。

20.查询尽可能使用limit减少返回的行数,减少数据传输时间和带宽浪费。

下载本文
显示全文
专题