广告
返回顶部
首页 > 资讯 > 数据库 >MySQL优化--概述以及索引优化分析
  • 610
分享到

MySQL优化--概述以及索引优化分析

摘要

一、Mysql概述 1.1、mysql文件含义 通过如下命令查看 show variables like ‘%dir%‘; Mysql文件位置及含义 名称 值 备注 basedir /usr/ 安装路径 charact


	MySQL优化--概述以及索引优化分析
[数据库教程]

一、Mysql概述

1.1、mysql文件含义

通过如下命令查看

show variables like ‘%dir%‘;

技术图片

Mysql文件位置及含义

名称 备注
basedir /usr/ 安装路径
character_sets_dir /usr/share/mysql-8.0/charsets/ 保存字符集目录
datadir /var/lib/mysql/ 数据存放路径
lc_messages_dir /usr/share/mysql-8.0/
plugin_dir /usr/lib64/mysql/plugin/ 插件
slave_load_tmpdir /tmp 缓存文件
tmpdir /tmp 缓存文件

配置文件位置

linux:/etc/my.cnf

win:C:ProgramDataMySQLMySQL Server 8.0my.ini

1.2、MySQL主要配置文件

二进制日志log-bin:用于主从复制

错误日志log-error:默认关闭,记录严重警告和错误信息,启动和关闭的详细信息等。

查询日志:默认关闭,可显式指定,记录慢查询日志

数据文件:

  • MyISAM中: 1. frm 存放表结构

    ? 2. myd 存放表数据

    ? 3. myd 存放表索引

  • InnoDB 中:ibd文件存放数据

1.3、MySQL引擎

查询引擎

show engines;

技术图片

show variables like ‘%storage_engine%‘

技术图片

MyISAM InnoDB
构成上的区别: 每个MyISAM在磁盘上存储成三个文件。第一个文件的名字以表的名字开始,扩展名指出文件类型。 .frm文件存储表定义。 数据文件的扩展名为.MYD (MYData)。 索引文件的扩展名是.MYI (MYIndex)。 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的大小只受限于操作系统文件的大小,一般为 2GB
事务处理上方面: MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持 InnoDB提供事务支持事务,外部键(foreign key)等高级数据库功能
SELECT、UPDATE、INSERT、Delete操作 如果执行大量的SELECT,MyISAM是更好的选择 1.如果你的数据执行大量的INSERTUPDATE,出于性能方面的考虑,应该使用InnoDB表 2.DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除。 3.LOAD TABLE FROM MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用
AUTO_INCREMENT的操作 每表一个AUTO_INCREMEN列的内部处理。 MyISAMINSERTUPDATE操作自动更新这一列。这使得AUTO_INCREMENT列更快(至少10%)。在序列顶的值被删除之后就不能再利用。(当AUTO_INCREMENT列被定义为多列索引的最后一列,可以出现重使用从序列顶部删除的值的情况)。 AUTO_INCREMENT值可用ALTER TABLE或myisamch来重置 对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引 更好和更快的auto_increment处理 如果你为一个表指定AUTO_INCREMENT列,在数据词典里的InnoDB表句柄包含一个名为自动增长计数器的计数器,它被用在为该列赋新值。 自动增长计数器仅被存储在主内存中,而不是存在磁盘上 关于该计算器的算法实现,请参考 AUTO_INCREMENT列在InnoDB里如何工作
表的具体行数 select count(*) from table,MyISAM只要简单的读出保存好的行数,注意的是,当count(*)语句包含 where条件时,两种表的操作是一样的 InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from table时,InnoDB要扫描一遍整个表来计算有多少行
提供行锁(locking on row level),提供与 oracle 类型一致的不加锁读取(non-locking read in SELECTs),另外,InnoDB表的行锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表, 例如update table set num=1 where name like "%aaa%"

二、索引优化分析

2.1、什么是索引

MySQL官方的定义为:

索引(Index)是帮助MySQL高效地获取数据的数据结构

索引的本质是数据结构

可简单的理解为“排好序的快速查找数据结构”

2.2、索引分类

索引类型 索引含义
单值索引 一个索引仅包含一个列
唯一索引 索引列的值必须唯一,可以有空值
复合索引 一个索引包含多个列

2.3、基本语法

2.3.1、创建

方法一:

CREATE [UNIQUE] INDEX indexName ON mytable(columnname(length));

方法二:

ALTER mytable ADD [UNIQUE] INDEX [indexname] on (columnname(length));

2.3.2、删除

DROP INDEX [indexName] ON mytable;

2.3.3、查看

SHOW INDEX FROM table_name;

2.4、explain

2.4.1、基本语法

EXPLAIN select语句;

2.4.2、字段解释

  • id:select查询的序列号,包含一组数字,表示select字句或操作表的顺序

    • id相同,执行顺序自上向下
    • id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
    • id相同不同,同时存在
  • select_type

    • id select_type 含义
      1 SIMPLE 简单select查询
      2 PRIMARY 包含复杂查询的最外层查询
      3 SUBQUERY 子查询
      4 DERIVED 衍生,递归执行,结果保存至临时表
      5 UNION 若第二个SELECT出现在UNioN之后,标记为UNION
      6 UNION RESULT 从UNION表获取结果的SELECT
  • table 这一行的数据关于哪张表

  • partitions

  • type

    • 从最好到最差排序 system>const>eq_ref>ref>range>index>ALL

    • 类型 含义
      system 表中只有一行数据,等于系统表
      const 通过索引一次就找到了,被视为常量
      eq_ref 唯一性索引扫描,表中只有一个记录匹配
      ref 非唯一性索引扫描,表中有多个记录匹配
      range 范围
      index 全索引扫描
      ALL 全表扫描
  • possible_keys

    • 可能会在该表上使用的索引,一个或者多个
    • 查询字段上存在的索引将被列出,不一定实际使用
  • key 实际使用的索引,如果为NULL,未使用索引;若有覆盖索引(从索引就可以获得数据,不需要查表),则仅在key字段出现

  • key_len 索引字段的最大可能长度,并非实际长度

    • 列类型 KEY_LEN 备注
      id int key_len = 4+1 int为4bytes,允许为NULL,加1byte
      id bigint not null key_len=8 bigint为8bytes
      user char(30) utf8 key_len=30*3+1 utf8每个字符为3bytes,允许为NULL,加1byte
      user varchar(30) not null utf8 key_len=30*3+2 utf8每个字符为3bytes,变长数据类型,加2bytes
      user varchar(30) utf8 key_len=30*3+2+1 utf8每个字符为3bytes,允许为NULL,加1byte,变长数据类型,加2bytes
      detail text(10) utf8 key_len=30*3+2+1 TEXT截取部分,被视为动态列类型。
  • ref 引用的字段,为NULL未引用

  • rows 根据表统计信息和索引选用情况,大致估算出所需要读取的行数

  • filtered

  • Extra 不适合包含在其他列但十分重要的信息

    • Using filesort 使用外部排序,不使用索引的排序;无法使用索引完成的排序成为“文件排序”
    • Using temporary 使用了临时表存储中间结果
    • Using index 覆盖索引
    • Using where 使用了where
    • Using join buffer 使用了连接缓存
    • Impossible where 不存在的条件
    • select tables optimized away 没有GROUP BY的情况下,优化MIN/MAX或者对于MyISAM存储引擎优化COUNT(*)操作,查询计划生成阶段即完成优化
    • distinct 使用了distinct

2.5、join语句的优化

  1. 尽可能减少Join语句中的NestedLoop的循环总次数;“ 永远用小结果集驱动大的结果集”。

  2. 优先优化NestedLoop的内层循环;

  3. 保证Join语句中被驱动表上Join条件字段已经被索引;

  4. 当无法保证被驱动表的Join条件字段被索引且内存资源充足的前提下,不要太吝惜JoinBuffer的设置;

MySQL优化--概述以及索引优化分析

原文地址:https://www.cnblogs.com/shimeath/p/13412937.html

您可能感兴趣的文档:

--结束END--

本文标题: MySQL优化--概述以及索引优化分析

本文链接: https://www.lsjlt.com/news/7651.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL优化--概述以及索引优化分析
    一、MySQL概述 1.1、MySQL文件含义 通过如下命令查看 show variables like ‘%dir%‘; MySQL文件位置及含义 名称 值 备注 basedir /usr/ 安装路径 charact...
    99+
    2020-07-19
    MySQL优化--概述以及索引优化分析 数据库入门 数据库基础教程 数据库 mysql
  • MySQL优化及索引解析
    索引简单介绍 索引的本质: MySQL索引或者说其他关系型数据库的索引的本质就只有一句话,以空间换时间。 索引的作用: 索引关系型数据库为了加速对表中行数据检索的(磁盘存储的)数据结...
    99+
    2022-11-13
  • MySQL索引优化实例分析
    目录1.数据准备2.实例一3.mysql如何选择合适的索引?4.常见 SQL 深入优化4.1.Order by与Group by优化4.2.分页查询优化4.3.join关联查询优化4.3.1.数据准备4.3.2.MySQ...
    99+
    2022-07-29
    MySQL索引优化 MySQL索引
  • 浅谈MySQL索引优化分析
    为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义。助你了解索引,分析索...
    99+
    2022-10-18
  • Mysql索引选择以及优化详解
    目录索引模型 B+Tree 索引选择 索引优化 索引选择性 覆盖索引 最左前缀原则+索引下推前缀索引唯一索引索引失效总结索引模型 哈希表 适用于只有等值查询的场景,Memor...
    99+
    2022-11-12
  • MySQL索引优化分享
    2,explain的作⽤ 查看表的读取顺序,读取操作类型,有哪些索引可用,表之间关联,每张表中有哪些索引被优化器执⾏ 3,索引命中策略略分析     最左匹配原则 在索引字段上加入函数(不匹配索引)     is null/is not n...
    99+
    2016-09-28
    MySQL索引优化分享
  • MySQL优化之索引解析
    索引的本质 MySQL索引或者说其他关系型数据库的索引的本质就只有一句话,以空间换时间。 索引的作用 索引关系型数据库为了加速对表中行数据检索的(磁盘存储的)数据结构 索引的分类 数据结构上面的分类 HASH 索引 等值匹配效率...
    99+
    2019-07-07
    MySQL优化之索引解析
  • 三、索引优化分析(下)
    ...
    99+
    2019-08-11
    索引优化分析(下)
  • MySQL索引优化
    一、单表 创建索引之前:type=ALL全表扫描,Extra里面的Using filesort(文件内部排序) 根据where后面的条件创建:CREATE INDEX idx_article_ccv ON articl...
    99+
    2019-01-06
    MySQL索引优化
  • mysql织梦索引优化之MySQL Order By索引优化
    在一些情况下,MySQL可以直接使用索引来满足一个ORDER BY 或GROUP BY 子句而无需做额外的排序。尽管ORDER BY 不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDER B...
    99+
    2022-10-20
  • MySQL优化及索引的方法
    这篇“MySQL优化及索引的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySQL优化及索引的方法”文章吧。索引简单介...
    99+
    2023-06-29
  • MySQL中索引与优化的示例分析
    这篇文章主要介绍MySQL中索引与优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!索引与优化1、选择索引的数据类型MySQL支持很多数据类型,选择合适的数据类型存储数据对...
    99+
    2022-10-19
  • MySQL的索引原理以及查询优化详解
    目录一、介绍1.什么是索引?2.为什么要有索引呢?二、索引的原理一 索引原理二 磁盘IO与预读三、索引的数据结构四、Mysql索引管理一、功能二、MySQL的索引分类三、 索引的两大...
    99+
    2022-11-12
  • MySQL优化(3):索引
    MySQL优化中,最重要的优化手段就是索引,也是最常用的优化手段   索引简介: 索引:关键字与数据位置之间的映射关系 关键字:从数据中提取,用于标识,检索数据的特定内容 目的:加快检索   索引检索为什么快: (1)关键字相对于...
    99+
    2014-05-17
    MySQL优化(3):索引
  • MySQL优化之索引
    SQL为什么需要优化? 对于初学者来说,能够写出实现功能的SQL语句而不出错,查询出所需要的结果,就已经能够满足日常使用了。但在某些场景,对性能的要求比较高,因此,要求SQL的执行响应速度快,就需要对SQL进行一定程度的优化。 在...
    99+
    2021-02-14
    MySQL优化之索引
  • MySQL索引优化EXPLAIN
    日常在CURD的过程中,都避免不了跟数据库打交道,大多数业务都离不开数据库表的设计和SQL的编写,那如何让你编写的SQL语句性能更优呢? 先来整体看下MySQL逻辑架构图: MySQL整体逻辑架构图可以分为Server和存储引擎层。...
    99+
    2015-10-24
    MySQL索引优化EXPLAIN
  • MySQL 5.7 索引优化
    提升查询性能最好的方法就是创建索引。索引项就像指向表中行的指针,让查询通过WHERE条件快速找到所要查询的行。MySQL所有的数据类型都可以创建索引。 不必要的索引会消耗系统的空间和MySQL在判断...
    99+
    2022-10-18
  • centos7-mysql-索引优化
    索引优化,优化查询速度-------------------------------------------------------count,统计一个表总计行数myisam储存引擎有自带计数器,使用cou...
    99+
    2022-10-18
  • mysql优化和索引
    表的优化1.定长与变长分离    如 int,char(4),time核心且常用字段,建成定长,放在一张表;    而varchar,text,blob这种...
    99+
    2022-10-18
  • MySQL索引优化的性能分析和总结
    本篇内容主要讲解“MySQL索引优化的性能分析和总结”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL索引优化的性能分析和总结”吧!案例分析我们先简单了解...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作