本文来自作者奋斗在奋斗,小马用车主程工程师,兼职MySQLDBA,拥有多年的互联网项目经验,曾就职于知名互联网公司,擅长数据库优化、架构设计、混编程序架构容错及设计。索引是应用程序设计和开发的一个重要方面。如果索引过多,应用程序中的更新、删除等操作会变慢,性能会受到影响;如果索引过少,对查询性能又会产生影响。要找到的一个平衡点,这对应用的性能很重要。
关于key_len长度计算公式:也就是说索引key_len长度过大,也会影响SQL性能。所以为什么也不能默认null,会占用字节,索引长度哟。利用索引加快查询速度行记录检索从索引记录中直接返回结果(联合索引)如果列定义为DEFAULTNULL时,NULL值也会有索引,存放在索引树的最前端部分。案例1:
表特殊说明:260万行记录,c1、c2、c5三个列值完全一样,但定义不一样:c1列定义为NOTNULLDEFAULT0,有索引c2列定义为DEFAULTNULL,有索引c5列定义为NOTNULLDEFAULT0,无索引
对比一下:
统计类业务:
求平均值,有索引时,扫描索引即可,无需全表扫描(避免回表)
有索引,可以快速排序完成
读取的列改成c1
28250937VS6595995383289,差了233478倍,再次表明不同的执行计划,性能差距很大呀。
领取专属 10元无门槛券
私享最新 技术干货