mysql explain的使用:
http://blog.csdn.net/kaka1121/article/details/53394426
索引类型
在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表
代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL );
我们随机向里面插入了10000条记录,其中有一条:5555, admin。
在查找username="admin"的记录 SELECT * FROM mytable WHERE username='admin';时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。
MySQL索引类型包括:
一、普通索引
二、唯一索引
三、主键索引
四、组合索引
什么情况下有索引,但用不上?
索引并不是时时都会生效的,比如以下几种情况,将导致索引失效:
- 如果条件中有or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因),例子中user_id无索引
注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
2.对于多列索引,不是使用的第一部分,则不会使用索引
3.like查询是以%开头
4.存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
什么情况下不推荐使用索引?
1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引
2) 频繁更新的字段不要使用索引
3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引
4) where 子句里对索引列使用不等于(<>),使用索引效果一般
使用覆盖索引,提高查询效率
覆盖索引(covering index):MySQL只需要通过索引就可以返回查询所需要的数据,而不必在查到索引之后再去查询数据
具体请参考:
https://xiaobin.net/201109/strange-sql-performance-problem/
MySQL性能优化的最佳21条经验
请直接参考:
http://blog.csdn.net/kaka1121/article/details/53395587
MySql的优化步骤
请直接参考:
http://www.cnblogs.com/hongfei/archive/2012/10/19/2731342.html
其他一些关于mysql的博文
http://www.cnblogs.com/hongfei/category/349096.html
参考文章:
http://www.jb51.net/article/49346.htm
http://www.cnblogs.com/hongfei/archive/2012/10/20/2732589.html
https://xiaobin.net/201109/strange-sql-performance-problem/
http://www.cnblogs.com/hongfei/archive/2012/10/19/2731342.html