百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 你需要把握的13个MySQL索引见识点
分享文章到:

你需要把握的13个MySQL索引见识点

发布时间:09/01 来源:未知 浏览: 关键词:
本篇文章介绍了MySQL索引的13个知识点,信赖对各位面试非常有帮忙,此刻将它分享给各位。

数据库索引有关的知识,说实在的,真的是很复杂,原本想好好看看这方面的东西,然后写篇文章具体谈谈的,后来发明索引的知识太难太深,要谈得全面又具体真的很难,所以最后还是把本人学到的和想到的变成下面一个个的问题,但愿能对大家帮忙!

知识点

问题1:什么是数据库索引?

数据库索引是数据库系统中一个重要的概念,索引也叫做 key ,是一种用于晋升数据库查询效力的数据构造,我们可以把索引懂得成一本书的名目,通过名目我们可以快速寻到对应章节的内容,一样的,通过数据库索引,我们可以快速寻到数据表中对应的记载。

总而言之,索引就像给数据表建了一个名目一样。

问题2:为什么在使用索引?

1 . 使用索引大大减少了储备引擎需要扫描的数据量,假如没有使用索引的话,每查询一行数据都要对数据表停止扫描,这样的话会非常慢。

2 . 由于索引已经排好序的,所以对数据表停止 ORDER BYGROUP BY 等操纵时,可以很快得到结果。

3 . 索引可以将随机的 I/O 转为次序的 I/O ,幸免昂扬的磁盘 IO 成本,晋升查询效力。

问题3:MySQL索引在哪个模块中实现的?

(免费学习视频教程引荐:mysql视频教程)

MySQL 的索引是在储备引擎这一层实现的,因此每一种储备引擎都有不一样的实现方式,对统一种索引的处置方式也完成不一样。

问题4:为什么设定了索引却不起作用?

假如使用以 % 开头的 LIKE 语句停止含糊匹配,则没法使用索引,如:

SELECT * FROM users WHERE name LIKE '%小张%';

SELECT * FROM users WHERE name LIKE '%小张';

不外以 % 为结尾则可以使用索引,如:

SELECT * FROM users WHERE name LIKE '张%';

OR 语句前后没有同时使用索引,比方下面的语句, 字段id 有索引,而 字段name 没有创立索引,那么下面的语句只能全表扫描,没法用到索引:

SELECT * FROM users id = 10 or name='test'复制代码

问题5:MySQL索引底层使用什么数据构造?

MySQL 中,大部分状况下,索引都是使用 B-Tree 作为底层数据构造, B-Tree 只是一种泛称,实际上不一样的储备引擎使用 B-Tree 时,有不一样的变种,比方 InnoDB 使用的是 B+Tree

别的也有一些非凡的索引构造,比方哈希索引,哈希索引底层则使用的是哈希表,在 MySQL中,只要 Memory 储备引擎支撑哈希索引。

问题6:什么状况下数据表不适合创立索引?

1 . 关于用于储备归档历史数据的且很少用于查询的数据表,不倡议创立索引。

2 . 数据量比力小的数据表,并且将来数据也不会有太大增长的数据,不该该建索引,比方用于留存配置的数据表。

3 . 修改频繁,且修改机能弘远于查询机能时,不该该再创立索引。

问题7:什么是回表?

回表是对Innodb储备引擎而言的,在 InnoDB 储备引擎中,主键索引的叶子节点储备的记载的数据,而一般索引的叶子节点储备的主键索引的地点。

当我们通过主键查询时,只需要搜索主键索引的搜索树,直接可以得到记载的数据。

当我们通过一般索引停止查询时,通过搜索一般索引的搜索树得到主键的地址之后,还要再使用该主键对主键搜索树停止搜索,这个历程称为回表。

问题8:聚簇索引与非聚簇索引的不同?

聚簇索引:聚簇索引的次序就是数据的物理储备次序,并且索引与数据放在一块,通过索引可以直接猎取数据,一个数据表中仅有一个聚簇索引。

非聚簇索引:索引次序与数据物理摆列次序无关,索引文件与数据是分开存置。

问题9:MySQL主键索引、独一索引与一般索引的不同?

设定为主键索引的字段不同意为 NULL ,并且一张数据表只能有一个主键索引。

设定为独一索引的字段,其字段值不同意重要。

一般索引可以包括反复的值,也可认为 NULL

问题10:索引可以提高查询机能,那是不是索引创立多多益善?

索引作为一个数据表的名目,本身的储备就需要耗损许多的磁盘和内存储备空间。

并助在写入数据表数据时,每次都需要更新索引,所以索引越多,写入就越慢。

特别是糟糕的索引,建得越多对数据库的机能影响越大。

问题11:MyISAM与InnoDB在处置索引上有什么不一样?

MyISAM 储备引擎是非聚族索引,索引与数据是分开储备的,索引文件中记载了数据的指针

InnoDB 储备引擎是聚族索引,即索引跟数据是放在一块的, InnoDB 一样将主键与数据放在一块,假如没有主键,则将 unique key 作为主键,假如没有 unique key ,则主动创立一个 rowid 作为主键,其他二级索引叶子指针储备的是主键的位置。

问题12:什么是索引的最左前缀原则?

MySQL 数据库不单可认为单个数据列创立索引,也可认为多个数据列创立一个结合索引,比方:

CREATE TABLE test(
    a INT NOT NOT,
    b INT NOT NOT,
    KEY(a,b)
);

当我们使用下面的查询语句时,由于 WHERE 语句中查询的前提就是结合索引,所以可以很快查询到数据。

SELECT * FROM test WHERE a=1 AND b=1;

一样,下面的语句也会利用上面创立的结合索引,这是由于 MySQL 会依照索引创立的次序停止排序,然后按照查询前提从索引最左边开端检测查询前提可否知足该索引,由于字段 a 在最左边,所以知足索引。

SELECT * FROM test WHERE a=1;

而使用 字段b 停止查询时,则为知足,由于从最左边匹配到的是 字段a ,所以 MySQL 推断为不知足索引前提。

SELECT * FROM test WHERE b=1;

从上面例子可以很好地理解索引的最左前缀原则,同时也说明了索引次序的重要性。

问题13:什么是覆盖索引?

假如一个索引中包括查询所要的字段时,此时不需要再回表查询,我们就称该索引为覆盖索引。

比方下面的查询中,字段id是主键索引,所以可以直接返回索引的值,显著晋升了查询的机能。

SELECT id FROM users WHERE id BETWEEN 10 AND 20;

小结

当然,上面列出的只是索引的一小部分知识点,有什么答复不合错误的地方,欢迎指出。

以上就是你需要把握的13个MySQL索引知识点的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有156人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板