Mysql逻辑分层:自上而下(连接层_——服服务层——引擎层——存储层)


存储引擎;
Innodb:事务优先(适合高并发操作)
Myisam:性能优先(表锁)
查询数据库引擎:
支持哪些引擎?show engines;
查看当前使用的引擎?show variables like '%storage_engine%';

其他优化方法;
exists / in
select * from table where exists / in (子查询);
如果主查询的数据量大,则用In
如果子查询的数据量大,则用exist (exists 语法:将主查询的结果放到子查询结果中进行条件校验(看子查询是否有数据,如果有数据,则校验成功,)
慢查询日志:(命令)
show variables like '%slow_query_log%';
临时开启——在内存中开启:set global slow_query_log = 1;
永久开启:/etc/my.cnf 中追加配置:vi / etc / my.cnf
重启Mysql服务:service mysql restart;
slow_query_log =1
slow_query_log_file=/var / lib /mysql / localhost-slow.log

慢查询阈值默认10秒命令;show variables like 'long_query_time';
临时设置阈值:set global long_query_time =5; ———设置完成后,重新登陆起效。(不需要重启服务)
永久设置阈值:/etc/my.cnf 中追加配置:设置完成后需要重启服务
vi / etc / my.cnf
long_query_time=20
show global status like 'slow_queries%'; ——超过阈值的SQL
通过mysqldumpslow工具查看慢SQL,可以通过一些过滤条件进行快速查出需要定位的慢SQL
-- 获取返回记录最多的3个SQL:
mysqldumpslow -s r -t 3 /var / lib /mysql / localhost-slow.log
--获取访问次数最多的3个SQL:
mysqldumpslow -s c -t 3 /var / lib /mysql / localhost-slow.log
-- 获取按照时间排序,前10条包含Left Join 查询语句的SQL:
mysqldumpslow -s t -t 10 -g "left loin" /var / lib /mysql / localhost-slow.log