Mysql性能优化 索引优化的一般步骤和操作

本文介绍了数据库索引的基础概念及其实现原理,包括B-tree和B+tree数据结构,并详细探讨了MySQL中MYISAM与INNODB两种存储引擎的特点。此外,还列举了适合添加索引的具体场景,如WHERE子句、ORDER BY子句等,同时提供了如何创建索引以及检查索引是否生效的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

索引是数据库优化中最常见最重要的手段,通过索引可以帮助用户解决大多数的SQL性能问题。

INSERT INTO students(NAME) VALUES('admin0'),('admin1'),('admin2'),('admin3'),(('admin4')),('admin5'),('admin6'),('admin7'),('admin8')
  • 索引是什么
    索引是一种实现了B-tree或者B+tree的数据结构,这种数据结构上有专门的查找算法

  • 索引的存储分类
    MYSQL有两个存储引擎:

    • MYISAM存储引擎:表数据和索引自动分开存储,各种是一个独立的存储文件,表的文件有:.MYD数据文件 .MYI所有文件.frm结构文件

    • INNODB存储引擎:表的数据和索引都是存储在同一个共享表空间里面,但是有多个文件组成,表的文件有:IBDATA1.IBD 数据库文件

    • INNODB存储引擎的表空间有两种形式:
      共享表空间:默认形式,索引和数据文件是共享表空间
      独立表空间形式:索引和表空间分离,多个文件之间可以方便的完成跨数据库甚至跨硬件的数据读写,相对来说比较灵活,版本5.5以上mysql默认存储引擎都是innodb,这样就可以做数据分布式支撑(TODO)

    • mysql目前不支持函数索引,但是能对列的前面一部分进行索引,这样就减少索引的存储空间,可以大大缩小索引文件的大小

  • 适合添加索引的场景

    出现在where、orderby、 groupby、 having条件句中的字段,并且他们是频繁进行查询的信息

  • 查找slowsql 慢日志查询找到slowsql

show VARIABLES like '%quer%'

这里写图片描述

slwo_query_log off ,慢查询日志未开启
开启慢查询日志:
win:my.ini
linux /etc/my.cnf
[mysqlid]元素 slwo_quer_log=TRUE slow_quer_log_file="路径" long_query_log=3

  • 执行计划分析sql
DESC SELECT * from students where id = 1;

这里写图片描述

DESC SELECT * from students where `name` = 'admin1';

这里写图片描述

没有索引是全表扫描,效率非常低
type类型的性能高低System、const、eq_ref、ref、ref_or_null
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
const代表一次就命中,ALL代表扫描了全表才确定结果。一般来说,得保证查询至少达到range级别,最好能达到ref。

  • 使用索引
ALTER TABLE students ADD INDEX in_name(name)

查询索引是否插入成功
这里写图片描述
MUL是普通索引//TODO

DESC SELECT * from students where `name` = 'admin1';

这里写图片描述

-导致索引失效

  • 使用组合索引:如果符合索引为列1,列2,列3 只使用列2列3则使用不到索引 必须带列1
  • like查询
  • %放在首位,索引不生效
  • 查询为空的时候 null 和 is null ,会使用索引
  • 列是字符串,但是查询条件是数字,也会导致索引失效
  • where 和 or组合:or左右两遍都是索引 索引才会生效,否则失效
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值