当前位置: 首页 > ai >正文

第8章-9 优化技巧2

        上一篇:《第8章-8 优化技巧1》,接着继续了解优化技巧,更多是把之前的知识,做一个详细的介绍。

1.索引的选择性

对索引选择性进一步了解。索引选择性是指不重复的索引值与表总记录数的比值,其范围(0,1]。通过索引的选择性,可以确定该索引是否合理(70%)。

SELECT * FROM employeesWHERE first_name='Martial' AND last_name='DuCasse';

1.单列的选择性:

 

select count(distinct first_name)/count(*) from employees;  -- 0.45%select count(distinct last_name)/count(*) from employees;   -- 0.58%

2.组合列的选择性:

select count(distinct(concat(first_name,last_name)))/count(*)
from employees  --99.32%  --30

   

3.创建组合索引:

-- 列的顺序:选择性高的列作为前导列
create index idx_name01 on employees(last_name,first_name); 

对索引列的两个基本要求

        1,索引选择性越高越好

        2,索引长度越短越好

2,前缀索引

         前缀索引:指用列的前缀代替整个列作为索引,当前缀长度合适时,可以使前缀索引的选择性接近全列索引,同时因为索引变短而减少索引的叶子节点。

select count(distinct(concat(last_name,left(first_name,2))))/count(*) 
from employees; -- 89%  select count(distinct(concat(last_name,left(first_name,4))))/count(*) 
from employees; -- 93% select count(distinct(concat(last_name,left(first_name,6))))/count(*) 
from employees; -- 91%  

         根据不同的前缀长度,考虑用二分法进行测量,再确定合适的长度

create index idx_name02 on employees(last_name,first_name(4));

3,索引覆盖:

        索引覆盖:一个索引包含了所有需要查询的字段,则称为‘索引覆盖’。即只需扫描索引而无须回表。

create index idx_name on employees(last_name,first_name);

gender 不在索引idx_name  所以不能走索引覆盖,需要回表进行二次查询

explain  SELECT gender FROM employees 
WHERE first_name='Martial' AND last_name='DuCasse';

索引包含了所有需要查询的字段   所以走“索引覆盖”  无需回表

explain  SELECT first_name,last_name 
FROM employees 
WHERE first_name='Martial' AND last_name='DuCasse';

二级索引的叶子结点由 索引列+主键值组成 ,所以走“索引覆盖”  无需回表

explain  SELECT first_name,last_name,emp_no 
FROM employees 
WHERE first_name='Martial' AND last_name='DuCasse';

索引覆盖特点:

        1,无需回表,减少IO

        2,在EXPLAIN的Extra列可以看到“Using index”的信息

总结:

        后续有碰到其它的优化技巧,再进行追加。索引选择性是索引有效性的评估手段,注意前缀索引的使用,减少索引的叶子节点,提高效率

        上一篇:《第8章-8 优化技巧1》

        下一篇:

http://www.xdnf.cn/news/5998.html

相关文章:

  • 2025年Flutter项目管理技能要求
  • 数据库系统概论(八)SQL单表查询语言超详细讲解(附带例题表格对比带你一步步掌握)
  • 智能体制作学习笔记1——智能体
  • 【前端】:单 HTML 去除 Word 批注
  • 实战案例:采集 51job 企业招聘信息
  • [特殊字符] VMware虚拟机挂起后Docker容器MySQL无法连接的解决方案
  • Java类与对象的描述及内存原理
  • 激光打印机常见打印故障简单处理意见
  • WebPageTest 多地域测试
  • ElasticSearch深入解析(十一):分页和分批统计的三种实现
  • 【AI论文】健康的大型语言模型(LLMs)?——评估大型语言模型对英国政府公共健康信息的掌握程度
  • TypeScript 知识框架
  • Python之with语句
  • 高级 Java 锁技术:超越基本同步
  • 应用探析|千眼狼PIV测量系统在职业病防治中的应用
  • idea2021创建web项目及其整合tomcat
  • RuoYi-Cloud
  • CodeBuddy 中国版 Cursor 实战:Redis+MySQL双引擎驱动〈王者荣耀〉战区排行榜
  • 阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷
  • 中国区adsense接收pin码,身份验证和地址验证指南
  • AD Class创建与Class应用
  • 求由无穷串构成的二进制数的值
  • 初始“协议”
  • IPD流程实战:产品开发各阶段目标、关注点和交付
  • 基于概率论与数理统计的股市预测模型研究
  • WHAT - 《成为技术领导者》思考题(第九章)
  • 【漫话机器学习系列】256.用 k-NN 填补缺失值
  • LeetCode热题100--206.反转链表--简单
  • 捌拾肆- 量子傅里叶变换 (2)
  • 编译docker版openresty