千家信息网

SQL语句优化

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,一、SQL语句优化(1)查看表结构MariaDB [oldboy]> desc test1;+-------+----------+------+-----+---------+-------+| F
千家信息网最后更新 2025年11月07日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: 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
查询 索引 语句 分析 日志 位置 条件 结构 高级 任务 例子 信息 内容 参数 命令 场景 字段 工具 数量 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 学校网络安全工作计划2022 山东软件开发人日单价标准 福山区直播软件开发公司 广东龙锦网络技术有限公司 网络安全技术只能拷贝吗 网络安全对未成年人保护工作 服务器电源排名 软件怎么修改数据库 开展网络安全演练的通知 怀旧服部落服务器怎么扩容 数据库中标题的作用 数据库文档模型的优缺点 小米和红米游戏服务器有区别吗 华为云服务器为什么是英文的 小程序从服务器取数据 网络安全及实施条例 网络安全信息的股票有什么 攻击ftp服务器 杭州云象网络技术的财务报告 网络安全法的主要职责是什么 山东软件开发人日单价标准 科技互联网商标属于多少类 企业网站建立服务器 重庆财务软件开发工程师 怀旧服开服服务器时间表 陕煤网络安全知识答题答案 山东商业软件开发定制价格 浙江高精度农业信息系统数据库 网络安全竞赛小品的短的梗概 计算机网络技术专业单招面试
0