MySQL数据库优化 - - 索引

MySQL数据库优化 - - 索引
1、建立索引
表查询多的时候,可以建立索引。不加索引的话,查询任意特定语句都会进行全表查询。但也不是任何情况都得建索引,一些列的值很少,比如性别可能就只有两个值,建索引就会影响到更新速度,这被称为过度索引
2、复合索引
若查询条件不止一个,要建立复合索引。比如:select * from t_user where name=‘lilei’ and age=3;如果仅在name和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,虽然这样已经相对不做索引时的全表扫描提高了很多效率,但是如果在name、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(name, age, salary)的复合索引,那么其实相当于创建了(name,age,salary)、(name,age)、(name)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。
3、如果有like话,尽量避免%xxx%两侧都有%的条件,单侧%可以使用索引,多侧不可以
4、如果用DDL改动了数据库表字段,需要重建索引,不然索引失效
5、条件中与null比较索引无效
可以设置有null的字段默认值为 0 ,查询时可以用条件 select ID from t_user where age = 0;
6、应尽量避免在 where 子句中使用 != 或 NOT IN 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
7、应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or Name = ‘admin’
可以这样查询:
select id from t where num = 10
union all
select id from t where Name = ‘admin’
8、排序的索引问题
mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
9、查询结果不要用*号来查询所有字段,要明确指明结果字段, 从性能上说,使用号,数据库管理系统要查询数据字段,将*号转换为数据集合的字段列表,列出字段就省略了这个操作,所以性能上使用号是不如穷举字段的;还可以 可以加快数据库的响应时间。

猜你喜欢

转载自blog.csdn.net/Mr_YeShaoFei/article/details/88366379