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

mysql自动判断索引机制_关于mysql 索引自动优化机制: 索引选择性(Cardinality:索引基数)...

1、两个同样结构的语句一个没有用到索引的问题:

查1到20号的就不用索引,查1到5号的就用索引,为什么呢?不稳定?

mysql> explain select * from test where f_submit_time between ‘2009-09-01‘ and ‘2009-09-20‘ \G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: test

type: ALL

possible_keys: PRIMARY,submit_time_index

key: NULL

key_len: NULL

ref: NULL

rows: 365628

Extra: Using where

1 row in set (0.02 sec)

mysql> explain select * from test where f_submit_time between ‘2009-09-01‘ and ‘2009-09-5‘ \G;

*************************** 1. row ***************************

id: 1

select_type: SIMPLE

table: test

type: range

possible_keys: PRIMARY,submit_time_index

key: submit_time_index

key_len: 8

ref: NULL

rows: 52073

Extra: Using where

1 row in set (0.00 sec)

说明:

二叉树索引本来最适合的就是点查询,和小范围的range查询,

当预估返回的数据量超过一定比例( 貌似当预估的查询量达到总量的30% )的时候,

再根据索引一条一条去查就慢了,反而不如全表扫描快了。Mysql有自己内部自动优化机制,

但有些自动优化机制可能不是最优的。这时候就需要人工去干预。

比如长期不优化表,Mysql判断出索引不优,就会不使用索引。

有时候就要人工强制使用真正高效的索引(FORCE INDEX)。

其实当本身的查询就约等于一个全表查询的时候,强不强制使用索引基本上没什么效果。

2、再看个例子:

今天遇到一个奇怪的问题,明明已经建立了索引,select语句的explain也表明会利用这个索引,可是结果偏偏没有用索引,最后扫描了全表。

两个结构完全一样的sql语句:

sql1: select * from table where col_a = 123 and col_b in (‘foo’,\‘bar’) order by id desc;

sql2: select * from table where col_a = 456 and col_b in (‘foo’,\‘bar’) order by id desc;

结果sql1选择利用了col_a的索引,速度很快,sql2利用了主键ID的索引,扫描了全表(40w行)。

仔细分析,发现数据库中,col_a=456的记录数有近1万条,而col_a=123的记录数只有几条。

于是就清楚了,MySQL选择索引不仅仅依据查询结构和索引结构,还会根据索引大概估算选择每种索引的数据量,然后选择他认为最快的索引。

可能是主键索引会比普通index更快,所以mysql最后选择了数据量跟大的id索引。

那么,如何解决这个问题呢?

很简单,只要在order语句里写多个键即可,比如:order by col_a, id desc

REF:mysql查询中利用索引的机制  http://blogread.cn/it/article/5023?f=wb

3、本质原因:Cardinality(索引基数)

很关键的一个参数,平均数值组=索引基数/表总数据行,平均数值组越接近1就越有可能利用索引。

索引选择性是不重复的索引值也叫基数(cardinality)表中数据行数的比值,索引选择性=基数/数据行,基数可以通过“show index from 表名”查看。

高索引选择性的好处就是mysql查找匹配的时候可以过滤更多的行,唯一索引的选择性最佳,值为1。

4、关于 mysql 索引优化与使用请见:

由浅入深探究mysql索引结构原理、性能分析与优化

http://my.oschina.net/leejun2005/blog/73912

关于mysql 索引自动优化机制: 索引选择性(Cardinality:索引基数)

标签:数值   自动   des   key   nbsp   问题   原因   target   分析

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/qqxiongmao/p/6004978.html

相关文章:

  • mysql左表有右表没有_查询左表存在而右表不存在的记录
  • python编程语言轻松入门_Python快速入门
  • c#打开mysql表格_使用C#更新mySQL表
  • arcgis python add in崩溃_arcgis python 异常处理
  • mysql5.7.17 win10_MySQL数据库之mysql 5.7.17 安装配置方法图文教程(windows10)
  • 多态 java_Java的多态(深入版)
  • java循环三角形_java用循环画三角形思路
  • 面试题java的泛型_Java高级面试 —— Java的泛型实现机制是怎么样的?
  • java 内存 新生代_JVM源码分析之堆内存的初始化
  • wsdl soap java_[Java] webservice soap,wsdl 例子
  • 人人网java面试题_人人网Java开发工程师笔试题
  • java国家排序_Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)
  • java json 增删查改_Java基础开发之JDBC操作数据库增删改查,分页查询实例详解
  • java socket发送中文乱码_java Socket接收数据乱码问题
  • java 浮点数 乘法_求助 用java能实现整数与浮点数的混合运算么?
  • HTML5新特性总结
  • JS字符串转数字方法总结
  • Netty源码解析1-Buffer
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • vue学习系列(二)vue-cli
  • 基于axios的vue插件,让http请求更简单
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • ​MySQL主从复制一致性检测
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (译)2019年前端性能优化清单 — 下篇
  • (转)项目管理杂谈-我所期望的新人
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ./configure,make,make install的作用(转)
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core 6 redis操作类
  • .NET 药厂业务系统 CPU爆高分析
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/sudoers (root权限管理)
  • @property @synthesize @dynamic 及相关属性作用探究
  • @四年级家长,这条香港优才计划+华侨生联考捷径,一定要看!
  • [ Linux ] Linux信号概述 信号的产生
  • [3D基础]理解计算机3D图形学中的坐标系变换
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ2208][Jsoi2010]连通数
  • [CISCN2019 华东南赛区]Web11
  • [codevs] 1029 遍历问题
  • [DM复习]关联规则挖掘(下)