mysql中sql优化_SQL的优化

mysql中sql优化_SQL的优化配置慢查询日志 set global slow_query_log = [ON|OFF] set global slow_query_log_file = /sql_log/slowlog.log …

配置慢查询日志

set global slow_query_log = [ON|OFF]
set global slow_query_log_file = /sql_log/slowlog.log
set global long_query_time= xx.xxx秒
set global log_queries_not_using_indexes= [ON|OFF]

代码100分

分析慢查询日志

代码100分mysqldumpslow [options][logs]
pt-query-digest [options][files][dsn]

实时监控慢查询

select id `user` , `host` ,DB,command, `time` ,state,info from information_schema.PROCESSList where time >=60;

分析执行计划

explain sql

id 列

  • id表示查询执行顺序
  • id相同时由上到下执行
  • id不同时由大到小执行

select_type 列

说明
SIMPLE 不包含子查询或是union操作的查询
PRIMARY 查询中如果包含任何子查询,那么最外层的查询则是PRIMARY
SUBQUERY SELECT列表中的子查询
DEPENDENT SUBQUERY 依赖外部结果的子查询
UNION UNION操作的第二个或是之后的查询的值为union
DEPENDENT UNION 当UNION作为子查询的时候,第二或者第二个后的查询的select_type值
UNION RESULT UNION产生的结果集
DERIVED 出现在from子句中的子查询

table 列

  • 指明从哪个表获取数据
  • <union M, N>由id列为M, N查询union产生的结果集
  • <derived N>/<subquery N> 由id列为N的查询产生的结果

partitions

  • 对于分区表,显示查询的分区id
  • 对于非分区表,显示null

type

性能由高到低

说明
NULL MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成
system cost连接类型的一个特例,当查询的表只有一行时使用
const 表中有且只有一个匹配的行时使用,如对主键或唯一索引的查询,这是效率最高的联接方式
eq_ref 唯一索引或主键查找,对于每个索引键,表中只有一条记录与之匹配
ref 非唯一索引查找,返回匹配某个单独值的所有行
ref_or_null 类似与ref类型查询,但是附加了对null值列的查询
index_merge 使用了索引合并优化
range 索引范围扫描,常见于between, >, <这样的查询条件
index 全索引扫描,遍历索引树
all 全表扫描,效率最差

possible_keys

  • 查询时可能使用的索引

key

  • 查询时实际使用的索引

key_len

  • 实际使用索引的最大长度

ref

  • 哪些列或产量用于索引查找

rows

  • 根据统计信息预估扫描行数

filtered

  • 返回结果行数占读取行数的百分比

extra

说明
Distinct 优化distinct操作,在找到第一匹配的元祖后即停止找同样值的动作
Not exists 使用not exist优化查询
Using filesort 使用文件来排序,通常会出现在order by或groub by查询
Using index 使用覆盖索引进行查询
Using temporary 使用临时表进行处理查询,常见于排序,子查询和分组查询
Using where 使用where条件过滤数据
select tables optimized away 直接通过索引获取数据,不用访问表

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11160.html

(0)
上一篇 2022-12-15
下一篇 2022-12-15

相关推荐

  • mysql设计表注意事项_数据库设计需要考虑的问题

    mysql设计表注意事项_数据库设计需要考虑的问题下面探讨的数据库为MySQL 存储引擎为innodb因为这是最常见的,使用最多的数据库和引擎 什么是页分裂? 这是因为聚簇索引采用的是平衡二叉树算法,而且每个节点都保存了该主键所对应行的数据,假设插…

    2023-03-08
    140
  • redis数据结构_数据结构keytype

    redis数据结构_数据结构keytypeRedis数据结构:String、Hash、List、Set、ZSet(每种数据结构均包含两种以上的内部编码) Redis单线程架构: 1. 纯内存访问 2. 非阻塞I/O (采用多路复用技术epo…

    2023-03-19
    149
  • mysql 中tinytext、text、mediumtext和longtext详解

    mysql 中tinytext、text、mediumtext和longtext详解一、数字类型 类型 范围 说明 Char(N) [ binary] N=1~255 个字元 binary :分辨大小写 固定长度 std_name cahr(32) not null VarChar…

    2022-12-23
    171
  • 加速Python代码的几个技巧

    加速Python代码的几个技巧Python是一门灵活且易于学习的编程语言,但某些情况下,Python代码可能会运行缓慢。为了克服这个问题,本文将介绍几个加速Python代码的技巧,包括使用列表推导式、使用生成器、使用装饰器等。

    2023-12-23
    112
  • Redis学习笔记(二) 链表「建议收藏」

    Redis学习笔记(二) 链表「建议收藏」链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。 redis中链表应用广泛,如list中就使用了链表。 每一个链表节点使用listNode结构标识(

    2023-02-26
    158
  • 使用 Python 打开mat文件

    使用 Python 打开mat文件mat是MATLAB的默认文件格式,用于存储数值和结构数据。Python是一种功能强大的脚本语言,可以用于数据分析和数据处理。在本文中,我们将介绍如何使用Python打开mat文件。我们将使用SciPy库中的io模块来读取mat文件,并将其转换为Python数据类型。

    2024-07-10
    39
  • postgres学习笔记「终于解决」

    postgres学习笔记「终于解决」将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOO、foo和"foo"在PostgreSQL中被认为是相同的,而"F

    2023-04-20
    144
  • Python多行字符串示例

    Python多行字符串示例Python是一种简单易学、功能强大的高级编程语言,其代码简洁易懂、可读性强等特点,使得Python成为了最受欢迎的编程语言之一。而Python多行字符串也是Python编程中常用的技巧之一,本篇文章旨在通过丰富的内容和示例,帮助读者更好地理解和使用Python多行字符串。

    2024-08-11
    32

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注