那些年被面试官怼的MySQL索引

嘿嘿,你的总结太全面了……就像教科书一样。
但确实,索引在MySQL中是如此重要,如果你不懂它真的会让你跪下。

上周,有客户问我,为什么在超大数据表上查询很慢,而且卡住了。
后来我发现他连索引都没有启用,或者启用了但完全没用……让我血压升高。

好吧,我们分开来说吧。

B+树之类的东西...听起来相当高,对吧? 知道就好,不需要死记硬背。
不管怎样,核心是能够快速找到数据。
如果你考虑图书目录,只看B树结构是没有用的。
知道它能让你快速翻到哪个页面才是真正的技巧。

MyISAM 和 InnoDB 有什么区别? 这件事需要记住!
MyISAM的索引就像一本小黄书。
地址写在里面了。
找到页码,然后转到该书。
数据文件和索引文件是两个不同的东西。

InnoDB 不同。
索引直接带来数据。
主键索引直接存储整条记录,辅助索引存储主键ID。
为什么需要选择更好的主键? 因为辅助索引最终还是要依赖主键来查找数据。
如果主键太长或太乱,效率就会很差。

什么时候应该添加索引? 你什么时候不应该? 这绝对是灵魂的问题!
添加内容:
主键,这是不言而喻的,对吧? 默认添加。

WHERE条件中经常使用的字段,例如检查订单表时,总是通过用户ID进行检查。

JOIN条件和多表关联中的字段必须添加。

ORDER BY 和 GROUP BY 中经常使用的列。

如果可以省事,可以添加 MIN() 和 MAX() 等聚合函数的参数列。

不应该添加的内容:
对于经常变化的字段,每次变化都必须更新索引,这让你很累。
例如,用户可以随时更改手机号码的字段。

字段都填充有重复的值。
例如,某个系统状态字段有两个值:启用和禁用。
添加索引不会为您节省任何东西。

对于数据量很小的表,比如几百条记录,直接扫描全表可能会更快。

最左匹配原则? 你必须记住这一点! 联合索引不是随便加上的。
例如,如果创建索引idx_user_status(user_id, status),那么在检查状态时可以直接使用该索引。
但是,如果只检查user_id,那么这个索引就没用了。
必须从左到右匹配。
user_id 是第一个字段,因此必须包含它才能使用索引。

测试验证? 你提到的方法非常好。
我之前在一个项目中尝试过:
表中有1 0万条数据,name字段都是随机的。

没有索引的时候,要等半天才能查name='张三',执行计划全是TABLE SCAN。

添加INDEX(name(1 0))后,秒级生成结果,执行计划变为INDEX SCAN。
这意味着什么? 索引效果是立竿见影的。
但请注意,索引并不是越多越好。
你的表中有1 0万条数据。
如果每个字段都建立索引,那么最终需要多少个索引才能检查数据? 这比全表扫描慢。

总结? 嗯...核心是索引可以快速查找,但是你需要能够添加。
不要盲目加分,也不要怕麻烦就不加分。
添加哪一项以及添加多少取决于您的数据和查询。

无论如何,这取决于你。
这个总结很全面,但是需要在实践中灵活运用。
我还在思考这个问题...不,我的意思是,如果你的大部分状态字段都启用了,那么这个索引就没用了吗? 需要进一步学习...

请说明什么是数据库索引,并列举其优缺点

索引加速快,但空间占用,更新慢。

项目:电商数据库,2 02 0年上线
数据:用户表,1 000万。

结论:索引使搜索速度提高了5 0%,但更新操作慢了1 0%。

创建索引的方式、优缺点以及创建索引的原则

索引方法: 公共索引:允许重复,在创建时或稍后添加。
全文索引:文本字段,支持全文检索,创建时或以后添加。
唯一索引:列值是唯一的,并且在创建时检查重复项。
主键索引:唯一非空,在创建时确定。

优点和缺点: 优点: 查询速度快并且处理大数据。
唯一索引保证了唯一性。
加速延伸。
优化批量排序。
提高系统性能。
缺点: 创建和维护成本高。
占用物理空间。
降低数据维护速度。

创作原则: 搜索列通常被索引。
主键列加主键索引。
外键列已建立索引。
范围查找列加索引。
对列加索引进行排序。
WHERE 子句列已建立索引。

索引的优缺点是什么?

上周,朋友的公司在做数据库优化,他跟我聊了索引的优缺点。
他表示,首先,创建唯一索引可以保证数据的唯一性,这是基础。
其次,索引实际上可以提高检索速度,这是它的首要功能。
再比如,它还可以加速表之间的联接,这对于引用数据的完整性非常有用。
此外,使用索引进行分组和排序效率更高。

但是,还有很多不足之处。
例如,创建和维护索引需要时间,并且这个时间会随着数据量的增加而增加。
索引也会占用物理空间,不仅是数据表,还有每个索引。
如果创建聚集索引,则空间需求会更大。
最后,在添加、删除或修改表数据时,必须动态维护索引,这会降低数据维护的速度。

2 02 3 年,他告诉我,虽然有很多缺点,但权衡利弊后,他们认为索引的好处大于成本,所以决定继续使用。
我问他,你会如何优化索引的使用?他表示,他们将定期评估指标的表现,并及时进行调整,尽量减少不必要的指标。
我听着,心想,这确实是一个很好的策略。
忘记它,你明白了。