慢查询
2016-07-20 14:55
190 查看
1.启动的时候 用 --log-slow-queries[=file_name] ,mysqld 写一个包含所有执行时间超过 long_query_time 秒的 sql 语句的日志文件
2.慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 mysql 在进行的线程,包括线程的状态,是否锁表等,可以实时地查看 sql 的执行情况,同时对一些锁表操作进行优化
使用 explain 可以分析 sql 语句的效率:
1).组合索引的 sql ,如果 where 条件里面是 前面的那个字段,那么久会用到 索引,否则不会,这就是索引的前缀特性
2).使用 like 的查询, % 不能在第一个字符
3).如果对大的文本进行搜索,使用全文索引而不用使用 like ‘%...%’
4).如果列名是索引,使用 column_name is null 将使用索引
存在索引但不适用索引:
1).如果 mysql 估计使用索引比全表扫描更慢,则不适用索引。例如列 key_part1均匀分布在 1 和 100 之间,下列查询中使用索引就不是很好:
select * from table_name where key_part1 > 1 and key_part1 < 90;
2).如果使用 memory/heap 表并且 where 条件中不适用 "=" 进行索引列,那么不会用到 索引. heap 表只有在 "=" 的条件下才会使用索引
3).用 or 分割的条件,如果 or 前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到
4).如果列类型是字符串,那么一定要加上引号
2.慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用 show processlist 命令查看当前 mysql 在进行的线程,包括线程的状态,是否锁表等,可以实时地查看 sql 的执行情况,同时对一些锁表操作进行优化
使用 explain 可以分析 sql 语句的效率:
1).组合索引的 sql ,如果 where 条件里面是 前面的那个字段,那么久会用到 索引,否则不会,这就是索引的前缀特性
2).使用 like 的查询, % 不能在第一个字符
3).如果对大的文本进行搜索,使用全文索引而不用使用 like ‘%...%’
4).如果列名是索引,使用 column_name is null 将使用索引
存在索引但不适用索引:
1).如果 mysql 估计使用索引比全表扫描更慢,则不适用索引。例如列 key_part1均匀分布在 1 和 100 之间,下列查询中使用索引就不是很好:
select * from table_name where key_part1 > 1 and key_part1 < 90;
2).如果使用 memory/heap 表并且 where 条件中不适用 "=" 进行索引列,那么不会用到 索引. heap 表只有在 "=" 的条件下才会使用索引
3).用 or 分割的条件,如果 or 前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到
4).如果列类型是字符串,那么一定要加上引号
相关文章推荐
- PHP+Ajax验证码验证用户登录
- JS获取GET参数
- maven工程常用命令
- Spring中Quartz的配置
- 线段树的代码模板(补充中)
- paxos分布式一致性算法--讲述诸葛亮的反穿越
- 使用Intellij IDEA的svn时提示出错: Can't use Subversion command line client: svn.
- mysql 线程等待时间,解决sleep进程过多的办法 【转】
- 58. Length of Last Word
- eclipse查看jar包源代码乱码问题解决
- <C++略识>之对象数组与对象成员
- ios 充值测试
- Codeforces-698A Vacations
- [置顶] 二维码的生成
- 浅谈LCA的离线算法
- Python 黑帽编程大纲(变化中)
- js 插件 弹出deom 自身属性值
- 博弈论
- Mybatis insert返回主键ID
- 和安全有关的那些事(非对称加密、数字摘要、数字签名、数字证书、SSL、HTTPS及其他)