2022-10-27 377
查询优化本就不是一蹴而就的,需要学会使用对应的工具、借鉴别人的经验来对 SQL 进行优化,并且提升自己。
图片来自 Pexels
先来巩固一下索引的优点,检索数据快、查询稳定、存储具有顺序性避免服务器建立临时表、将随机的 I/O 变为有序的 I/O。
但索引一旦创建的不规范就会造成以下问题,占用额外空间,浪费内存,降低数据的增、删、改性能。
所以只有在理解索引数据结构的基础上才能创建出高效的索引。本文所有操作均在 MySQL 8.0.12。
创建索引规范
在学习索引优化之前,需要对创建索引的规范有一定的了解,此规范来自于阿里巴巴开发手册。
主键索引:pk_column_column。
唯一索引:uk_column_column。
普通索引:idx_column_column。
索引失效原因
创建索引需知道在什么情况下索引会失效,只有了解索引失效的原因,在创建索引时才不会出现一些已知错误。
带头大哥不能死
这局经典的语句就是涵盖创建索引时一定要符合最左侧原则。
例如表结构为 u_id,u_name,u_age,u_sex,u_phone,u_time,创建索引为 idx_user_name_age_sex。
查询条件必须带上 u_name 这一列。
不在索引列上做任何操作
不在索引列上做任何计算、函数、自动或者手动的类型转换,否则会进行全表扫描。简而言之不要在索引列上做任何操作。
俩边类型不等
例如建立了索引 idx_user_name,name 字段类型为 varchar。在查询时使用 where name = kaka,这样的查询方式会直接造成索引失效。
正确的用法为 where name = “kaka”。
不适当的 like 查询会导致索引失效
创建索引为 idx_user_name,执行语句为 select * from user where name like “kaka%”;可以命中索引。
执行语句为 select name from user where name like “%kaka”;可以使用到索引(仅在 8.0 以上版本)。
执行语句为 select * from user where name like ‘’%kaka";会直接导致索引失效。
范围条件之后的索引会失效
创建索引为:
idx_user_name_age_sex
执行语句:
select*fromuserwherename=‘kaka’andage>11andsex=1;
上面这条 SQL 语句只会命中 name 和 age 索引,sex 索引会失效。复合索引失效需要查看 key_len 的长度即可。
总结:% 在后边会命令索引,当使用了覆盖索引时任何查询方式都可命中索引。
原文链接:https://77isp.com/post/10316.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态