028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

MySQL索引及优化的知识点有哪些

这篇文章主要介绍“MySQL索引及优化的知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL索引及优化的知识点有哪些”文章能帮助大家解决问题。

公司专注于为企业提供成都网站设计、网站建设、微信公众号开发、电子商务商城网站建设小程序开发,软件按需网站策划等一站式互联网企业服务。凭借多年丰富的经验,我们会仔细了解各客户的需求而做出多方面的分析、设计、整合,为客户设计出具风格及创意性的商业解决方案,成都创新互联公司更提供一系列网站制作和网站推广的服务。

索引是什么?

索引的结构?

索引可以有B-Tree索引,Hash索引。索引是在存储引擎中实现的

InnoDB / MyISAM 仅支持 B-Tree索引

Memory/Heap 支持B-Tree索引和Hash索引

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

InnoDB中一个页的大小为16KB(一个页即B+树上的一个节点),若表的主键为INT,大小为4字节,那一个节点也能够存储4K个键值,假设指针和键值都占相同大小,那么高度为3的B+树,第二层有2048个节点,第三层的叶子节点数为2048*2048 = 4194304,一个节点为16KB,则一共可容纳67108864KB,即65536MB,即64G的数据。

由于叶子节点是被一个链表串起来的,所以若order by 索引列,则默认已经是排好序的,所以效率会很高。

MySQL索引及优化的知识点有哪些

MyISAM的辅助索引和主键索引一样,唯一的区别是,辅助索引中的key可以重复,而主键索引的key不能重复

MySQL索引及优化的知识点有哪些

 InnoDB的辅助索引,叶子节点中存的是主键值,而不是地址。走辅助索引,需要检索2次。

MySQL索引及优化的知识点有哪些

InnoDB和MyISAM索引的区别:

问题

索引存在哪儿?

索引的优缺点?

索引的分类

 索引使用

 CREATE INDEX index_name ON table_name(col_name);
-- 或者
ALTER TABLE table_name ADD INDEX index_name(col_name)
DROP INDEX index_name ON table_name;

explain执行计划

现有一张user表,其索引如下所示

MySQL索引及优化的知识点有哪些

其中name,age,address 三个字段作为一个组合索引

可以使用explain对某个SQL语句进行性能分析

explain select * from user where name = 'am';

MySQL索引及优化的知识点有哪些

possible_keys
可能用到的索引
key
实际用到的索引
key_len
用于查询的索引的长度
ref
如果是等值查询,这里会会是const
rows
预计需要扫描的行数(不是精确值)
extra

额外信息,如

MySQL索引及优化的知识点有哪些

type

MySQL索引及优化的知识点有哪些

下面是满足了最左前缀规则,即对idx_name_age_add来说,满足了最左前缀,第一个索引为name

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

注意like时,通配符%不能放在开头,否则会导致全表扫描

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

索引使用规范(索引失效分析)

  1. 全值匹配
    在索引列上使用等值查询

explain select * from user where name = 'y' and age = 15;

MySQL索引及优化的知识点有哪些

2. 最左前缀

组合索引中,查询条件要从组合索引的最左列开始,如上述example中组合索引idx_name_age_add,是建立在三个列name,age,address的,若跳过name,直接用age查询,则会变为全表扫描

explain select * from user where age = 15;

MySQL索引及优化的知识点有哪些

3. 不要在索引列上做计算

4. 范围条件右侧的索引列会失效

MySQL索引及优化的知识点有哪些

看到第一个SQL语句,没有用上addresss索引

5. 尽量使用覆盖索引

explain select name,age from user where name = 'y' and age = 1;

可以避免回表查询

6. 索引字段不要使用不等(!= 或 <>),不要判断null(is null/ is not null)
会导致索引失效,转为全表扫描

MySQL索引及优化的知识点有哪些

MySQL索引及优化的知识点有哪些

7. 索引字段上使用like时,不要以%开头

MySQL索引及优化的知识点有哪些

8. 索引字段如果是字符串,记得加单引号

MySQL索引及优化的知识点有哪些

9. 索引字段不要用or

MySQL索引及优化的知识点有哪些

例子总结:

MySQL索引及优化的知识点有哪些

关于“MySQL索引及优化的知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


网站名称:MySQL索引及优化的知识点有哪些
网页URL:http://www.tsicrk.com/article/iggdpj.html

其他资讯

让你的专属顾问为你服务

1.7226s