mysql数据库优化

来源:互联网 发布:spring框架编程实例 编辑:程序博客网 时间:2024/04/28 05:51

1.创建索引:

(1).使用or

如select * from student where age>10 or math>80

单有一个创建索引无用,必须同时在age和math上两个同时建立索引,

(2)like

like使用‘%aa’不是使用索引,使用‘aa%’才会使用索引

(3)列类型如为字符串,必须输入为字符串,否则索引失效


(4)goup by 默认分组查询后有默认的排序,可能降低速率,可以使用order by null来处理

(5)使用and

使用and时可以通过创建复合索引方式进行查询

比如有一条语句是这样的:select * from users where area='beijing' and age=22;
如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age, salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

(6)多表查询

多表查询最好使用join来使用查询,如使用select * from user left join product on user.id = product.user_id

(7)索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

(8)不要在列上进行运算

select * from user where YEAR(agedate)>2007

上述的查询将造成索引失效,从而通过全表扫面进行查询应该通过 select * from user where agedate >‘2007-01-01’

(9)不使用NOT IN和<>操作
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。


0 0
原创粉丝点击