我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQL语句优化

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQL语句优化

一、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: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 5   #查询行数,表示当前查询了5行
        Extra: Using where
1 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: ref
possible_keys: index_name
          key: index_name
      key_len: 48
          ref: const
         rows: 1   #查询行数,表示当前只查询了1行
        Extra: Using index condition
1 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.log
mysqladmin -uroot -p123456 flush-logs 

mysqlsla分析:http://blog.itpub.net/7607759/viewspace-692828/

优化起因:
1)网站出了问题,访问很慢。
    a.web服务器的负载、存储、db(负载、io、cpu)
    登录db:show full processlist
2)慢查询语句(日志文件)
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_detail
6.建立索引  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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQL语句优化

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

2024-04-02

sql查询语句优化

sql查询语句优化1、对查询进行优化,应尽量避免全表扫描a、 where 及 order by 涉及的列上建立索引b、 尽量避免在 where 子句中对字段进行 null 值判断,可以将null值设置默认值0等,如:将select id from t wher
sql查询语句优化
2016-05-19

用case when优化Sql语句

用case when优化Sql语句 有些时候想直接从数据库查询数据,并导出,但一些类型或状态存储的是01等数字,你想显示对应的文字,这个时候就可以使用case...when语句了。结构case...when...then...when...the
用case when优化Sql语句
2020-06-19

SQL UPDATE语句怎么优化

要优化SQL UPDATE语句,可以考虑以下几个方面:1. 限制更新的行数:如果你只需要更新部分记录,可以使用WHERE子句来限制更新的行数。确保WHERE子句中的条件能够尽可能准确地过滤出要更新的行。2. 减少更新的列数:只更新必要的列,
2023-09-05

MySQL优化SQL语句的技巧

在面对不够优化、或者性能极差的SQL语句时,我们通常的想法是将重构这个SQL语句,让其查询的结果集和原来保持一样,并且希望SQL性能得以提升。而在重构SQL时,一般都有一定方法技巧可供参考,本文将介绍如何通过这些技巧方法来重构SQL。 一、
2022-05-24

mysql的sql语句如何优化

要优化MySQL的SQL语句,可以采取以下几个方法:1. 使用索引:使用适当的索引可以大大提高查询性能。可以使用`EXPLAIN`命令来分析SQL语句的执行计划,以确定是否需要添加索引。2. 优化查询语句:避免使用`SELECT *`查询所
2023-09-27

编程热搜

目录