今天就从这个问题来聊聊MySQL遴荐索引时王人作念一些什么事情沙巴在线。
[[434553]]
一、怎样遴荐索引 影响优化器的几不祥素一条查询SQL试验需要经过连结器、分析器、优化器、试验器,而遴荐索引的重负就交给了优化器。
优化器在多个索引中遴荐野心是为了找出试验代价最低的决议。
影响优化器遴荐无非就这几个要素,扫描行数、是否使用了临时表、是否使用文献排序。
临时表、文献排序这个两个点会在后期著述给行家冉冉引出,今天只聊扫描行数。
扫描行数越少则看望磁盘数据的次数就越少,浪费的CPU资源越少。
那么这个扫描行数是从何处取的呢?
扫描行数从何而来?创建索引一直提议行家给辨认度高的列开拓索引,在一个索引上不同值的个数称之为基数(cardinality)。
赛事预测使用show index from table_name不错放哨每个索引的基数是几许。 沙巴在线
索引基数
索引基数怎样诡计MySQL使用采样统计的门径,会选出N个数据页,每个数据页大小16kb,接着统计选出来的数据页上的不同值就会得到一个平均值,用平均值在乘以索引的页面数得到的效果等于这个索引的基数。
表数据是握续加多或删减的,统计的这个数据也不是每每变化的,当变更的数据特出1/M时会自动触发从头诡计。
这个M是笔据参数innodb_stats_persistent的值选则的,诞生为on值为10,诞生为off值为16。
皇冠体育hg86a
索引基数通过这种格式诡计不是精确的但也差不了几许。
为什么优化器遴荐了扫描行数多的索引? 第一种情况表增删非常每每,导致扫描行数不准确。
第二种情况假定你主键索引扫描行数是10W行,而平庸索引需要扫描5W行,这种情况就会遭逢优化器遴荐了扫描行数多的。
皇冠客服不回消息在索引那一期著述中知说念主键索引是不需要回表的,找到值径直就复返对应的数据了。
而平庸索引是需要先拿到主键值,再笔据主键值取得对应的数据,这个经由优化器遴荐索引时需要诡计的一个本钱。
怎样处理这种情况扫描行数不准确时不错试验analyze table table_name敕令,欧博体育网址从头统计索引信息,达到预期优化器遴荐的索引。
二、索引遴荐颠倒怎样处理 决议一在MySQL中提供了force index来强制优化器使用这个索引。
使用门径:select * from table_name force index (idx_a) where a = 100;
博彩平台游戏技巧但别歪曲force index的使用门径,之前在代码中看到这么一个案例,给查询列使用了函数操作导甚至用不上索引,然后这哥们就径直使用force index,细目不能的哈!
当优化器莫得正确遴荐索引时是不错使用这种决议来处理。
皇冠信用盘输钱不给会怎么样2024年欧洲杯中,皇冠博彩公司成为受欢迎赌博网站,许多那里下注,有人赢得大奖。 弱点使用force index的弱点礼服行家也知说念等于太固执,一朝索引名字改教训会失效。
决议二删掉误选的索引,肤浅粗暴,许多索引开拓其实亦然给优化器的一个误导,径直删掉即可。
决议三修改SQL语句,主动领导MySQL使用祈望的索引,一般情况这种作念法使用的很少除非你对系统非常老到,不然尽量少操作。
365bet网站 三、纪念优化器遴荐索引当先会笔据扫描行数再由试验本钱决定。
皇冠足球当索引统计信息不准确时,使用analyze table 处理。
皇冠客服飞机:@seo3687
优化器遴荐了无理的索引,只用force index来快速改造,再通过优化SQL语句来领导优化器遴荐正确的索引,最暴力的手法是径直删除误选的索引。
ag官网