一 简介:今天来聊天mysql8.0关于索引
二 增强
1 支持隐藏索引,这个可以用来测试创建的索引是否具有优化作用
   创建 alter table t1 alter index u1 invisible/visible
   注意

1 哪怕是隐藏索引,也必须保持索引的更新
   2 通过show index from最后一列可以查看索引相关情况
   3 这项操作不会阻塞DDL,是非常快的
2 增加降序索引,可以加快排序相关查询
   简介:mysql5.7即便指定降序索引,也是无法进行创建的
   创建: `idx_c1_c2` (`c1`,`c2` DESC) 可以在show create table查看
   目标: 针对是多列的order by排序,按照不同顺序,针对单列做降序索引没有任何意义
    解决问题: 1 能消除因为多列排序导致的filesoft,explain中会出现 Backward index scan(反向扫描) 2 不再对group by进行隐式排序 GROUP BY ASC和GROUP BY DESC语法已经被废弃

3 增加函数索引

简介: 针对列的运算也可以组合成索引了

创建: alter table  add index aaa((c2-c1),);

注意: 1 是双括号 2 可以包含多列计算,和联合索引一样 3 不能包含主键

4 skip scan

简介: 非前缀索引也可以用了 这是一个重要的信息

说明: 在5.X版本的mysql中,一旦建立的联合索引无法应用到第一个索引,就不会再选用该联合索引.到了8.0,mysql会对前列的索引值进行赋予然后分别进行查询,最后合并汇总,这样就能构建联合索引的使用场景了

三 新功能 直方图
  1 直方图的解释
    定义 直方图能近似获得一列的数据分布情况,从而让数据库知道它含有哪些数据(数据分布)
  2 创建删除直方图命令
   ANALYZE TABLE tbl_name UPDATE HISTOGRAM ON col_name [, col_name] WITH N BUCKETS;
   ANALYZE TABLE tbl_name DROP HISTOGRAM ON col_name [, col_name];
  3 注意事项
   1 可指定多个列
   2 N值为1-1024 默认为100
   3 直方图不能通过show create table/index from查看
   4 直方图针对的是普通索引,唯一性索引是无法创建直方图的
   5 直方图针对的基数很低的列,因为mysql可能认为它是分布均匀的
   6 直方图是针对索引无法优化后的一个补偿手段,而且是0成本的
   7 直方图建立是有成本的,因为要读数据到内存上,建议低峰期建立
   8 直方图分部 等宽直方图(singleton)、等高直方图(equi-height)

4 直方图和索引的对比
  1 维护一个索引有代价。每一次的insert、update、delete都会需要更新索引,会对性能有一定的影响。而直方图一次创建永不更新
  2 如果有索引,优化器用使用index dives技术来估算符合条件范围的记录数量。这种方式也是有代价的,特别是查询语句条件中有很长的IN列表。直方图相对而言代价小,因此可能更合适
  3 通过explain的filtered(精确率)进行判断,如果通过直方图能提高精确率,哪怕是全表扫描,依然速度会很快
  5 直方图相关变量
    histogram_generation_max_mem_size 默认值 20000000
    作用 MySQL会根据给定的histogram_generation_max_mem_size的值计算该将多少行数据读到内存中。如果根据当前histogram_generation_max_mem_size的限制,MySQL认为只能读一部分数据,那么MySQL会进行取样
  6 常用sql语句
   1 SELECT histogram->>'$."sampling-rate"' FROM information_schema.column_statistics WHERE table_name = "table" AND column_name = "column"; 查询取样率
   2 SELECT TABLE_NAME,COLUMN_NAME,HISTOGRAM->>'$."number-of-buckets-specified"' AS num_buckets_specified,JSON_LENGTH(HISTOGRAM, '$.buckets') AS num_buckets_created FROM INFORMATION_SCHEMA.COLUMN_STATISTICS WHERE SCHEMA_NAME = "";
     1 如果num_buckets_created与num_buckets_specified相等,那么存在可能,在创建直方图的时候指定的buckets不够多,那么此时可以通过增加buckets的数量,来提高直方图的准确性
  7 总结
   直方图能对重复值较多的列实现加速过滤效果,如果区分度小于1024的列,那么真的不建议使用

mysql 8.0 ~ 索引优化的更多相关文章

  1. MySQL中的索引优化

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 过多的使用索引将会造成滥用.因此索引也会有它的缺点.虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 ...

  2. MySql在建立索引优化时需要注意的问题

    MySql在建立索引优化时需要注意的问题 设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得 ...

  3. MySQL如何利用索引优化ORDER BY排序语句

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...

  4. MySQL如何利用索引优化ORDER BY排序语句 【转载】

    本文转载自:http://blog.csdn.net/ryb7899/article/details/5580624  .感谢相关作者. MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执 ...

  5. mysql多列索引优化

    “把Where条件里面的列都建上索引”,这种说法其实是非常错误的! 这样一个查询,假设actor_id与film_id都单独建立索引 SELECT film_id , actor_id FROM sa ...

  6. MySQL 多列索引优化小记

    MySQL 5.6.30 问题背景 由于爬虫抓取的数据不断增多,这两天在不断对数据库以及查询语句进行优化,其中一个表结构如下: CREATE TABLE `newspaper_article` ( ` ...

  7. MySQL如何利用索引优化ORDER BY排序语

    MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通 ...

  8. MySQL系列(六)--索引优化

    在进行数据库查询的时候,索引是非常重要的,当然前提是达到一定的数据量.索引就像字典一样,通过偏旁部首来快速定位,而不是一页页 的慢慢找. 索引依赖存储引擎层实现,所以支持的索引类型和存储引擎相关,同一 ...

  9. mysql 单表索引优化

    建表语句 CREATE TABLE IF NOT EXISTS `article` ( `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMEN ...

随机推荐

  1. haploview出现“results file must contain a snp column”的解决方法

    将plink文件用“--recode HV ”的参数生成即可 /software/plink --file yourfile --recode HV --snps-only just-acgt --o ...

  2. feemarker知识

    map遍历多出来一些东西解决: <#if rightType?exists><#list rightType.keySet() as typeId> <h2>${r ...

  3. IntelliJ IDEA配置maven远程仓库

    最近在搭建springMVC+mybatis的框架,在添加jar包的时候出问题了.以前都是直接将jar包放到lib里面即可,但是看到现在用maven的比较多,就去配置maven.然后发现,在添加某个版 ...

  4. div设置overflow-scroll滚动之后,jq获取其子元素的offset.top出现问题。

    先上个图: 布局很简单,左右超过屏幕的部分自行滚动. 1. html <div class="ce-container"> <div class="ce ...

  5. Oracle_异常

    问题1 描述:plsql客户端列值中的中文都成了问号 分析:客户端和服务端编码不一致所致 解决:1.查询服务端数据库编码 SQL> select userenv('language') from ...

  6. ELK 安装与基本配置(一)

    对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...

  7. MySQL权限授权认证详解

    MySQL权限授权认证详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL权限系统介绍1>.权限系统的作用是授予来自某个主机的某个用户可以查询.插入.修改.删除 ...

  8. 利用spring的MultipartFile实现文件上传【原】

    利用spring的MultipartFile实现文件上传 主要依赖jar包 spring-web-3.0.6.RELEASE.jar 用到 (org.springframework.web.multi ...

  9. JQuery和ASP.NET分别实现级联下拉框效果

    在学习JQuery之前知道下拉框的级联效果可以通过asp.net控件实现,现在学习了JQuery,知道了JQuery和select也能实现.我分别举两个小例子说明这两种方法如何实现. 1.用JQuer ...

  10. 转载 --- SKLearn中预测准确率函数介绍

    混淆矩阵 confusion_matrix 下面将一一给出'tp','fp','fn'的具体含义: 准确率: 所有识别为"1"的数据中,正确的比率是多少. 如识别出来100个结果是 ...