数据库优化

 

索引

1.避免在where语句中对字段进行null值判断,否则导致引擎放弃使用索引。

2.避免使用!=或者<>操作符

3.避免or select id from t where num=10 union all select id from t where num=20

4.应尽量避免在 where 子句中对字段进行表达式 函数 操作,这将导致引擎放弃使用索引而进行全表扫描

5.尽量避免在索引过的字符数据中,使用非打头字母搜索。这也使得引擎无法利用索引。

6.4.in 和 not in 也要慎用,因为IN会使系统无法使用索引,而只能直接搜索表中的数据 见如下例子: SELECT * FROM T1 WHERE NAME LIKE ‘%L%’ SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’ SELECT * FROM T1 WHERE NAME LIKE ‘L%’ 使用聚集索引来优化查询速度,比如查询某段时间,是线性的。


使用分表查询,按照日期单独建表,把一张表分成多张表

使用数据库分区技术,把

  分区表在逻辑上是一个表,而物理上是多个表。从用户角度来看,分区表和普通表是一样的。使用分区表的主要目的是为改善大型表以及具有多个访问模式的表的可伸缩性和可管理性。

  分区表是把数据按设定的标准划分成区域存储在不同的文件组中,使用分区可以快速而有效管理和访问数据子集。


查询语句的优化

写数据语句时尽可能减少表的全局扫描,利用查询条件来优化查询速度

1. 尽量想办法使用临时表扫描替代全表扫描;
2. 抛弃in和not in语句,使用exists和not exists替代;
3. 和客户确认,模糊查询是否有必要,如没有必要,去掉like语句;
4. 注意建立适当的,符合场景的索引;
5. 踩死 "*" 号;
6. 避免在where条件中对字段进行函数操作;
7. 对实时性要求不高的报表,允许脏读(with(nolock))。
posted @ 2018-06-25 20:55  vince66  阅读(93)  评论(0编辑  收藏  举报