【面试官】一条SQL,我怎么知道它有没使用到索引?
- 面试官:索引有什么用?
- 面试官:B树索引说一下?
- 面试官:你说值都存储在叶子节点,那有什么好处?
- 面试官:知道为什么主流数据库引擎不采用哈希索引吗?
- 面试官:聚簇索引和二级索引有什么关联?
- 面试官:那我一条SQL,我怎么知道它有没使用到索引?
- 面试官:有没索引失效的情况呢?
大家好,我是南哥。
一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。
文章目录
- 索引类型
- B-Tree索引
- B-Tree值的存储
- 哈希索引
- 聚簇索引
- 索引效率
- Explain关键字
- 索引失效
1. 索引类型
面试官:索引有什么用?
大家可以把你最近最爱的一本书类比成一个MySQL数据库,你要快速翻到你昨天看到的精彩部分,是不是要先看下书的目录索引,要翻到第几章、第几页。
数据库最主要的就是数据存储,其次就是提供复杂查询服务,而索引就是MySQL作为快速找到记录的一种数据结构。索引类型有多种,像常见的B树索引、哈希索引,这些都需要我们去掌握。
不要和我说你看书都用书签,或者靠手感就能翻出来昨天看到的地方。
我们对比下不采用索引和采用索引的差异。
目前我本机数据库的article表有10w条数据,表结构如下。
CREATE TABLE `article` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`author_id` int(10) NULL DEFAULT NULL,
`category_id` int(10) NOT NULL DEFAULT 0,
`views` int(10) NULL DEFAULT NULL,
`comments` int(10) NULL DEFAULT NULL,
`title` varbinary(255) NULL DEFAULT NULL,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL,
PRIMARY KEY (`id`, `category_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1001 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
没建立索引前,使用explain关键字分析查询SQL。type显示ALL
,也就是该SQL执行时对MySQL进行的是全表扫描。
explain select id from article where category_id = 1 order by views desc;
+----+-------------+---------+------+---------------+------+---------+------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+------+---------------+------+---------+------+------+-----------------------------+
| 1 | SIMPLE | article | ALL | NULL | NULL | NULL | NULL | 102279 | Using where; Using filesort |
+----+-------------+---------+------+---------------+------+---------+------+------+-----------------------------+
建立索引后。
create index idx_ca_vi on article(category_id,views);
type显示为ref
,同时Extra列显示Using where; Using index
,Using index
代表该SQL执行时使用了索引,而Using index
代表了在MySQL服务端再进行了一次views
字段的排序。
+----+-------------+---------+------+---------------+-----------+------
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java面试突击 文章被收录于专栏
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!