博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL语句优化
阅读量:6360 次
发布时间:2019-06-23

本文共 3203 字,大约阅读时间需要 10 分钟。

一、SQL语句优化

(1)查看表结构MariaDB [oldboy]> desc test1;+-------+----------+------+-----+---------+-------+| Field | Type     | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| id    | int(4)   | NO   |     | NULL    |       || name  | char(16) | NO   |     | NULL    |       || age   | int(2)   | YES  |     | NULL    |       |+-------+----------+------+-----+---------+-------+(2)explain 查看是否含有建立索引的语句MariaDB [oldboy]> explain select * from test1 where name="kaka"\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: test1         type: ALLpossible_keys: NULL          key: NULL      key_len: NULL          ref: NULL         rows: 5   #查询行数,表示当前查询了5行        Extra: Using where1 row in set (0.00 sec)(3)创建索引MariaDB [oldboy]> create index index_name on test1(name);Query OK, 0 rows affected (0.05 sec)Records: 0  Duplicates: 0  Warnings: 0(4)重新查询MariaDB [oldboy]> explain select * from test1 where name="kaka"\G*************************** 1. row ***************************           id: 1  select_type: SIMPLE        table: test1         type: refpossible_keys: index_name          key: index_name      key_len: 48          ref: const         rows: 1   #查询行数,表示当前只查询了1行        Extra: Using index condition1 row in set (0.00 sec)#从以上例子可以看到,使用索引,可以更快的查询所需要的信息。

二、使用explain命令优化SQL语句(select语句)的基本流程

1、抓慢查询SQL语法方法

每隔2,秒输入:SHOW FULL PROCESSLIST; 如果出现2次说明存在慢查询MariaDB [oldboy]> show full processlist;+----+------+-----------+--------+---------+------+-------+-----------------------+----------+| Id | User | Host      | db     | Command | Time | State | Info                  | Progress |+----+------+-----------+--------+---------+------+-------+-----------------------+----------+|  9 | root | localhost | oldboy | Query   |    0 | NULL  | show full processlist |    0.000 |+----+------+-----------+--------+---------+------+-------+-----------------------+----------+1 row in set (0.00 sec)

2、分析慢查询日志

配置参数记录慢查询语句log_query_time = 2     #执行超过2s记录到log中log_queries_not_using_indexes    #没有走索引的语句,记录log中log-slow-queries = /data/3306/slow.log    #log的位置explain select * from test from where name='oldboy'\G  #查看是否走索引explain select SQL_NO_CACHE * from test where name='oldboy'\G #去除缓存

3、对需要建索引的条件列建立索引

生产场景,大表不能高峰期建立索引,例如:300万记录

4、分析慢查询SQL的工具mysqlsla(每天早晨发邮件)

切割慢查询日志,去重分析后发给大家1)mv,reload进程 2)cp,>清空2)定时任务mv /data/3306/slow.log /opt/$(date +%F)_slow.logmysqladmin -uroot -p123456 flush-logs mysqlsla分析:http://blog.itpub.net/7607759/viewspace-692828/优化起因:1)网站出了问题,访问很慢。    a.web服务器的负载、存储、db(负载、io、cpu)    登录db:show full processlist2)慢查询语句(日志文件)long_query_time=2    #执行超过2s记录到log中log_queries_not_using_indexs  #没有走索引的语句,记录log中log-slow-queries=/data/3306/slow.log   #log的位置切割,分析,发给管理员案例分析:1.查看是否db存在慢查询:show full processlist;2.explain分析:explain 慢查询的语句3.查看表结构:desc test1;4.定位在哪列建立索引,哪张表5.查看条件字段列的唯一值的数量  select count(distinct ader) from ad_oldboy_detail6.建立索引  create index ....

三、使用profile优化SQL语句优化

了解内容,高级DBA使用help show profile;select @@profiling;set profiling = 1;select @@profiling;show profile;show profile for query 2;http://www.cnblogs.com/adforce/archive/2012/06/02/2532287.html

转载于:https://blog.51cto.com/jinlong/2058345

你可能感兴趣的文章
VUE中使用vuex,cookie,全局变量(少代码示例)
查看>>
grep -w 的解析_学习笔记
查看>>
TX Text Control文字处理教程(3)打印操作
查看>>
CENTOS 7 如何修改IP地址为静态!
查看>>
MyCat分片算法学习(纯转)
查看>>
mysqld_multi实现多主一从复制
查看>>
中介模式
查看>>
JS中将变量转为字符串
查看>>
servlet笔记
查看>>
JVM(五)垃圾回收器的前世今生
查看>>
Spring Boot 自动配置之@EnableAutoConfiguration
查看>>
web前端笔记
查看>>
finally知识讲解
查看>>
Matplotlib绘图与可视化
查看>>
openstack ocata版(脚本)控制节点安装
查看>>
【微信公众号开发】获取并保存access_token、jsapi_ticket票据(可用于微信分享、语音识别等等)...
查看>>
datatable 获取最大值
查看>>
sqlserver2012一直显示正在还原(Restoring)和从单用户转换成多用户模式(单用户连接中)...
查看>>
spark复习总结02
查看>>
李瑞红201771010111《第九周学习总结》
查看>>