龙空技术网

MySQL第43课~索引排序,覆盖和维护+索引无效

小饼干笔记 179

前言:

现时我们对“mysql显示服务名无效”可能比较看重,看官们都想要知道一些“mysql显示服务名无效”的相关资讯。那么小编在网络上搜集了一些有关“mysql显示服务名无效””的相关内容,希望姐妹们能喜欢,你们一起来了解一下吧!

所有内容收录在合集~MySQL入门到熟练。欢迎点赞关注我哦~

当索引无效时 | When Indexes are Ignored

有时候,写了索引,但是吧,看起来怪怪的

如果我们用的是and看起来没问题,前面是range,后面poss key都正常

换成了or之后,就变成了全范围搜索,全索引扫描,比表扫描快一点,不从磁盘读取记录

可以试试把查询分成更小的查询

先查询地域,这样积分就靠后了,相当于查询2遍,一次查3行,一次查10行

那么这个时候,比较好的办法就是在他们前面创建单独索引

这个时候能明显看到查询效率的提升,如果是大型的数据,那效率提升非常显著

在表达式中用到了列的时候,MySQL就无法用最优方式利用索引了

改变的方法是单独放一边,则会提升效率

Using Indexes for Sorting

前面的内容是过滤筛选,其实还可以排序

在列上添加索引时,MySQL会获取列中的所有值,对其排序,并存储在索引中

如果列不在索引中,那就不排序,展现的时候是这样,全表扫描,使用外部排序,这是一种算法的名称,和文件没什么关系,同时很耗费。

一般不给数据进行排序,除非你可以设计索引,避免这个排序操作。

show status 查看服务器变量

会有很多变量,下滑有一个last query cost,上一次查询成本

直接滑很久,可以用like进行筛选

可以看到,这里面的查询成本很低,不到2,因为我没设置表格啊

现在添加选择一下表格,

我用一下索引,显示,不多

那么如果排序姓名的话,会增长10倍

所以得出结论,外部排序非常贵,比索引中获取数据贵10倍。

因此,有条件可以设置索引,用于筛选和排序数据,

进阶版中,查询中有where子句,ORDER BY 子句,有一些难度,取决于列和顺序

MySQL可能不选取索引为数据排序,基本规则是,ORDER BY句子中的数据,应与索引中列的顺序相同,

展示中有一列,是附加列,就是额外的部分,可以看到反向索引间隙,不是外部排序

如果有2列排序,可以按A排,可以按B排,可以同样的列降序排,

但不能混淆方向,也不能在中间添列,会全表扫描

附加列有时候是where,有时候是index,缩小查找范围数据会小很多。

覆盖索引 | Covering Indexes

前面的时候,没有一次select,是全选的表格,而是选择的列

因为如果选了全部,不仅会得到一个奇怪的全表扫描,费时间而且也肯定没key

复合索引中,有顾客信息,地址等,每当创建一个二级索引,会自动将主键包含在二级索引中,所以索引会包含这些内容

如果选择其中的一列,就索引包含的内容,就会用索引来满足查询。

即:覆盖索引。

一个包含所有满足查询需要的数据的索引。通过使用这个索引,不读表也可以执行查询

设计索引时,先看看where语句,常用的列,索引的列,达成缩小搜索范围的目标

然后看看order by,是否可以在搜索中包含这些列

最后看select用的列,如果也包含,就会有覆盖索引。然后MySQL就可以用索引进行查询。

维护索引 | Index Maintenance

索引也会有多余索引和重复索引

重复索引:同一列上的顺序一致的索引,比如123和123

可以反复创建,不会阻止,还会被保留,所以要及时查。

多余索引:如果两列上有一个索引,然后在A上创建另一个,就是多余索引

因为原本的索引可以优化包含A的查询。

如果只在A和B上创建了索引,或者只有B,就不算多余,因为可以满足不同条件的查询

总结:索引维护就是查看索引,然后删除多余的,重复的,和未使用的

完结~

标签: #mysql显示服务名无效