数据库优化的几种方法

 

                    数据库查询优化

1、尽量避免扫描全表,对涉及到where或order by的列上添加索引;当然索引也不是越多越好,例如性别字段,在性别比数据量大致相等的情况,因为有大量重复列时,索引不会生效,然而却会在新增和删除时增加额外的消耗(因为增删可能会重建索引)

 

2、尽量不使用select * 而查询业务所需要的字段select id。

 

3、能用between 解决就不要用in 查询,因为当使用in查询时,查询的数据达到一定的比例,搜索引擎就会放弃索引,而进行全表扫描。

如 :取区间为[1,4]

select id from t where id in(1,2,3,4);可以优化为

select id from t where id between 1 and 4;

 

4、避免在where条件中对null值进行判断,否则会导致搜索引擎放弃使用索引而进行全表扫描

如:select name from t where name is null;

如果业务允许,可以给对应字段赋予默认值

 

5、如果两个表中一个表较小,一个表较大,那么子查询表大的用exists,子查询表小的用In,效率会高的。

也就是说 IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况,这样效率会高的

如 :表s是小表,表b是大表

   select * from s where exists (select aid from b where b.aid = s.aid) 扫描s全表,用到b表上的aid的索引。因为b表大。

   select * from b where aid in (select aid from s)   扫描s 全表,用到b表上的aid 索引

 

6、Not in和Not Exists的效率

如果查询语句使用了Not In,那么内外表全部进行扫描,没有乃至索引

Not Exist用到子表中的索引进行查询,所以无论两个表中哪个表大,Not exists 都要比Not in 要快

 

7、不要在 where子句中的"="左边使用表达式,因为这样可能会导致无法正确使用索引 

如:where id*3 = 6;改为 id = 2;

 

8、避免使用 !=和<>符号,否则会导致引擎放弃使用索引而扫描全表

 

posted @ 2018-02-07 18:01  水木清周  阅读(795)  评论(0编辑  收藏  举报