美文网首页
mysql sql优化

mysql sql优化

作者: 一曲三月 | 来源:发表于2021-08-30 21:56 被阅读0次

1,mysql拥有自身的sql优化器
mysql常见瓶颈:CPU,磁盘io,服务器硬件
2,explain
使用explain关键字模拟sql优化器执行sql语句,分析sql语句和表结构的性能瓶颈
使用:explain + sql语句
作用:表的读取顺序
id——select_type——table——type——possible_keys——key——key_len——ref——row——extra
id :select查询的序列号,id相同是,执行顺序从上往下。id不同时,id值大的先执行
select_type :查询类型
simple 简单查询,不包含子查询或者union
primary 查询包含子查询
subquery 子查询
derive 衍生子查询,在from后的子查询
union union后的子查询
union result 从union表获取结果的select
type :文件查询类型
从最好到最差
system->const->eq_ref->ref->range->index->all
一般来说,查询优化到range
system 一张表只有一条记录
const 表示通过常量索引,一次就查找到,常用与比较主键或者唯一索引
eq_ref 唯一索引扫描,常用与比较主键或者唯一索引
ref 非唯一索引扫描,返回与条件值对应的多行记录
index 全表通过索引文件扫描
all 标明通过磁盘文件全表扫描
possible_keys: 查询涉及的字段如果有索引,将被列出,但是不一定被查询实际使用
key :实际使用的索引,没有使用或者索引失效,则为null。查询中如果使用了复合索引,则该索引只出现在key列。
key_len:表示索引使用的字节数,该列显示的是索引字段的最大可能长度,并非实际使用的长度。key_len是根据表字段的定义得来的。
ref:显示索引的那一列被使用了或常量
rows: 根据表的统计信息和索引的选用情况,估计 找出查询的结果 需要读取的行数
extra: 不适合在其他列显示的额外信息
分类:using filesort mysql无法使用索引完成的排序操作称作文件排序
using temporary 使用临时表保存中间结果,mysql在对查询结果排序时使用临时表。常见于排序order by 和分组 group by
using index 表明相应的select操作中使用了覆盖索引,没有在表中查找数据行。
using where 表明索引被用来执行索引键值的查找,如果没有同时出现using where 则表明索引用来读取数据而非执行查找动作。
覆盖索引:查询的列被所建的索引覆盖
!!!ps
索引优化
1)mysql range查询类型后面的索引无效
2)多表连接:左连接特性,left join条件决定如何从右表搜索行,左表一定都有,所以右表是关键点,一定需要建立索引。
3)索引最好建在经常查询的字段中


join优化
1)尽可能减少join语句嵌套循环的循环总次数,永远用小表驱动大表。

  1. 优先优化嵌套循环的内层循环
    3)保证join语句中被驱动的表上join on字段已经建立索引
    4)当无法保证被驱动的表上join字段建立索引,且内存资源充足的情况下,可以增加joinbuffer的设置
    索引失效
    1.1 不在索引列上做任何操作(包括计算,函数,自动or手动类型转换),会导致索引失效
    1.2 存储引擎不能使用范围条件(<,>,in,between and )。
    1.3 尽量使用覆盖索引,减少select *
    1.4 mysql在使用不等于(!=,<>)的时候,无法使用索引会导致全表扫描
    1.5 is null ,is not null 无法使用索引
    1.6 like以通配符开头(%abc)会导致索引失效,%,like加右边
    1.7 字符串不加单引号索引失效
    1.8 少用or,用它连接时会索引失效
    1.9 最佳左匹配法则
    1.10 group by分组必排序,会用到临时表。
    抄袭口诀
    全值匹配我最爱,最左前缀要遵守
    带头大哥不能死,中间兄弟不能断
    索引列上少计算,范围之后全失效
    like %写最右,覆盖索引不写*
    不等空值还有or,索引失效要少用
    字符引号不能丢,SQL高级也不难

3,查询截取优化

相关文章

  • 11-mysqlSQL分析

    六星教育 - java-mysql优化1909 SQL优化 所谓SQL优化:基于MySQL的优化器查询规则来优化S...

  • mysql数据库优化

    1. Mysql优化介绍 1.1 sql优化 a. sql优化分析b. 索引优化c. 常用sql优化d. 常用优化...

  • MySQL数据库与SQL优化

    一、MySQL数据库 - SQL优化 MySQL DBMS - MySQL Database Management...

  • 详解MySQL之SQL优化(1)

    MySQL学习笔记(6) SQL优化(1) 优化SQL的一般步骤 本文所涉及案例表来自MySQL的案例库sakil...

  • SQL审核优化建议

    SQL审核优化建议 数据库类型 MySQL:RDS MySQL、PolarDB MySQL、MariaDB、Pol...

  • 1 mysql的架构介绍

    1.1 Mysql简介 1.1.1 概述 1.1.2 高级MySQL mysql内核 sql优化工程师 mysql...

  • 2018-07-01

    SQL优化改写之美--MySQL虚拟列、伪列实现对SQL的优化 慢SQL文本如下: SQL执行时长达38S,获取3...

  • 千万级MySQL数据库建立索引,提高性能的秘诀

    实践中如何优化MySQL 实践中,MySQL的优化主要涉及SQL语句及索引的优化、数据表结构的优化、系统配置的优化...

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • MYSQL优化 Analyze Table

    Analyze Table(分析表) MySQL 的Optimizer(优化元件)在优化SQL语句时,首先需要收集...

网友评论

      本文标题:mysql sql优化

      本文链接:https://www.haomeiwen.com/subject/bcliiltx.html