【MySQL】sql如何优化?

这篇具有很好参考价值的文章主要介绍了【MySQL】sql如何优化?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、优化步骤

(1)通过SQL监控、请求、日志等找出耗时的SQL语句;

(2)使用Explain方式查看SQL耗时的具体原因;

(3)根据实际情况解决:索引、缓存、左右连接

二、Explain

  • select_type:简单查询or复杂查询?simple、primary、subquery、deriveer、union。
  • type:SQL关联类型,system > const > eq_ref > ref > range > index > All。一般达到range就行,最好达到ref级别。
  • keys和key_len:具体使用到哪些索引及索引长度。
  • extra:记录额外信息,如使用覆盖索引(Using index)、使用临时表、使用外部排序(Using filesort)、使用某些聚合函数等等.

Type级别

system/const:如id=1这种常量

eq_ref:主键或联合主键被使用且返回一条;

ref:使用普通索引唯一索引的部分前缀,可能找到多个值(如:name='zhangsan');

range:使用一个索引检索某个范围,如in、between、大于等等操作;

index:扫描全索引拿到结果,一般是扫描某个二级索引(唯一索引、普通索引、前缀索引等索引属于二级索引)。

ALL:全表扫描。

三、索引

        索引本质上是方便MySQL高效获取数据的数据结构。

(一)索引的分类

  • 数据结构维度: B+树、Hash索引、全文索引、R-Tree索引。
  • 物理存储维度: 聚集索引、非聚集索引。
  • 逻辑存储维度: 主键索引、普通索引、联合索引、唯一索引、空间索引。

唯一索引:索引值唯一,允许有null值。

主键索引:特殊的唯一索引,一个表只能有一个主键索引,且不能有null值。

联合索引:在多个字段上创建索引,遵循最左前缀原则。

聚簇索引:正文内容就是按照一定规则排序的目录,如B+树,按照索引排序,一个表只能有一个,存储记录物理连续。

非聚簇索引:目录是目录,正文纯粹是正文,不按照索引排序,一个表可以有多个,存储记录物理不连续。文章来源地址https://www.toymoban.com/news/detail-730347.html

(二)索引使用的注意事项

  • 索引不能包含null,否则无效;
  • 索引上不能使用not in和<>操作;
  • 不要在索引列上进行运算,会导致索引失效全表扫描;
  • 查询使用多个列时可以建组合索引,查询时要符合最左前缀原则;
  • 列长度过长时使用短索引,比如varchar2(100)的列可以使用列的前10个字段作索引;
  • 控制索引的数量,过多的索引会消耗性能。

四、细节

  • in/exists:in(适合子表比主表小的情况)、exists(适合子表比主表大的情况),尽可能让小表驱动大表。
  • not in/not exists:not in(内外表全表扫描),not exists(无论跟大表小表都会用到表索引)。
  • =和!=:尽量不使用!=避免全表扫描。
  • like:左模糊匹配使用索引,全模糊匹配不使用索引。
  • select:避免使用select *。
  • union all/union:union需去重效率低,union all不去重效率高。
  • 用连接代替子查询,避免子查询产生的临时表。
  • join:join的表不宜太多。left join是左表驱动右表,inner join会自动小表驱动大表。

到了这里,关于【MySQL】sql如何优化?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【MySQL数据库】MySQL 高级SQL 语句一

    ) % :百分号表示零个、一个或多个字符 _ :下划线表示单个字符 ‘A_Z’:所有以 ‘A’ 起头,另一个任何值的字符,且以 ‘Z’ 为结尾的字符串。例如,‘ABZ’ 和 ‘A2Z’ 都符合这一个模式,而 ‘AKKZ’ 并不符合 (因为在 A 和 Z 之间有两个字符,而不是一个字符)。 ‘ABC%’

    2024年02月09日
    浏览(66)
  • 【性能优化】MySql数据库查询优化方案

    了解系统运行效率提升的整体解决思路和方向 学会MySQl中进行数据库查询优化的步骤 学会看慢查询、执行计划、进行性能分析、调优 ​关于这个问题,我们通常首先考虑的是硬件升级,毕竟服务器的内存、CPU、磁盘IO速度 、网络速度等都是制约我们系统快慢的首要因素。硬

    2024年02月03日
    浏览(44)
  • Mysql数据库结构优化汇总

         设计表以最大限度地减少其在磁盘上的空间。这可以减少写入磁盘和从磁盘读取的数据量,从而带来巨大的改进。较小的表通常需要较少的主内存,而它们的内容在查询执行过程中被主动处理。表数据的任何空间减少也会导致更小的索引可以更快地处理。 尽可能使用最

    2024年02月07日
    浏览(33)
  • 数据库应用:MySQL数据库SQL高级语句与操作

    目录 一、理论 1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.MySQL中6种常见的约束 二、实验  1.克隆表与清空表 2.SQL高级语句 3.SQL函数 4.SQL高级操作 5.主键表和外键表  三、总结 克隆表:将数据表的数据记录生成到新的表中。 (1)克隆表 ① 先创建再导入 ② 创建

    2024年02月13日
    浏览(60)
  • MYSQL数据库故障排除与优化

    目录 MySQL 单实例故障排查 MySQL 主从故障排查 MySQL 优化 故障现象 1 ERROR    2002    (HY000):    Can\\\'t    connect    to    local    MySQL    server    through    socket \\\'/data/mysql/mysql.sock\\\' (2) 问题分析:以上这种情况一般都是数据库未启动或者数据库端口被防火墙拦截导致。 解

    2024年04月11日
    浏览(35)
  • MySQL数据库性能优化技巧介绍

    MySQL是目前最流行和广泛使用的开源关系型数据库之一,随着数据量的增长和访问负载的提高,优化数据库性能变得至关重要,以确保系统能够高效地处理大量的并发请求。本文将记录一些MySQL数据库性能优化的技巧,提高数据库的运行效率,提升系统性能。 对于MySQL,最简单

    2024年02月08日
    浏览(93)
  • MySQL数据库的优化技术二

    纵论 对mysql优化时一个综合性的技术,主要包括  表的设计合理化(符合3NF) 添加适当索引(index)  [ 四种: 普通索引、主键索引、唯一索引unique、全文索引 ] 分表技术( 水平分割、垂直分割 ) 水平分割根据一个标准重复定义几个字段值相同,表名称不同的表,表的结构相同 读(

    2024年02月11日
    浏览(29)
  • MySQL数据库——MySQL优化服务器,提高MySQL的运行速度!

    MySQL是一种广泛使用的关系型数据库管理系统,优化MySQL服务器可以显著提高数据库的性能和运行速度。在下面的回答中,我将介绍一些常见的MySQL优化策略和技术,以帮助提高MySQL服务器的性能。 1、优化数据库设计: 正确设计数据库结构,使用适当的数据类型、索引和约束

    2024年02月07日
    浏览(55)
  • MySQL基础篇——MySQL数据库客户端连接,数据模型,SQL知识

    作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.客户端连接MySQL 二. 数据模型 1.关系型数据库(RDBMS) 2.数据模型 三.SQL 1.SQL通用语法 2.SQL分类 3.数据库操作 1). 查

    2024年02月06日
    浏览(50)
  • 【数据库】MySQL 高级(进阶) SQL 语句

    location表格创建 store_info表格创建 显示表格中一个或数个字段的所有数据记录 不显示重复的数据记录 按照条件进行查询 在已知的字段数据取值范围内取值 另外还有not in命令,用法一致,表示显示不在指定范围内的字段的值。 在两个字段数据值之间取值,包含两边字段的数据

    2024年02月09日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包