登陆

极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏

admin 2019-10-31 261人围观 ,发现0个评论

概述

在联系数据极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏库中,索引是一种独自的、物理的对数据库表中一列或多列的极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏值进行排序的一种存储结构,它是某个表中一列或若干列值的调集和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

mysql中支撑hash和btree索引。innodb和myisam只支撑btree索引,而memory和heap存储引擎能够支撑hash和btree索引


1、检查当时索引运用情况

咱们能够经过下面句子查询当时索引运用情况:

  • Handler_read_first 代表读取索引头的次数,假如这个值很高,阐明全索引扫描许多。
  • Handler_read_key代表一个索引被运用的次数,假如咱们新添加一个索引,能够检查Handler_read_key是否有添加,假如有添加,阐明sql用到索引。
  • Handler_read_next 代表读取索引的下列,一般发作range scan。
  • Handler_read_prev 代表读取索引的上列,一般发作在ORDER BY … DESC。
  • Handler_read_rnd 代表在固定方位读取行,假如这个值很高,阐明对很多成果集进行了排序、进行了全表扫描、相关查询没有用到适宜的KEY。
  • Handler_read_rnd_next 代表进行了许多表扫描,查询功能低下。

其实比较多运用场景是当索引正在作业,Handler_read_key的值将很高,这个值代表了一个即将索引值读的次数,很低的值标明添加索引得到的功能改进不高,由于索引并不常常运用。

Handler_read_rnd_next 的值高则意味着查询运转低效,而且应该树立索引弥补。这个值的意义是在数据文件中读下一行的请求数。假如正进行很多的表 扫描,Handler_read_rnd_next的值较高,则一般阐明表索引不正确或写入的查询没有运用索引


2、检查索引是否被运用到

SELECT
object_type,
object_schema,
object_name,
index_name,
count_star,
count_read,
COUNT_FETCH
FROM
PERFORMANCE_SCHEMA.table_io_waits_summary_by_index_usage;

假如read,fetch的次数都为极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏0的话,便是没有被运用过的。

3、检查运用了哪些索引

explain相关sql,检查type表明查询用到了那种索引类型

+-----+-------+-------+-----+--------+-------+---------+-------+
| ALL | index | range | ref | eq_ref | const | system | NULL |
+-----+-------+-------+-----+--------+-------+---------+-------+

从最好到最差依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > 赵荀index_subquery > range > index > ALL
  • system 表中只要一条记载,一般来说只在体系表里呈现。
  • const 表明经过一次索引查询就查询到了,一般对应索引列为primarykey 或许unique where句子中 指定 一个常量,由于只匹配一行数据,MYSQL能把这个查询优化为一个常量,所以非常快。
  • eq_ref 仅有性索引扫描。此类型一般呈现在多表的 join 查询,关于每一个早年面的表衔接的对应列,当时表的对应列具有仅有性索引,最多只要一行数据与之匹配。
  • ref 非仅有性索引扫描。同上,但当时表的对应列不具有仅有性索引,可能有多行数据匹配。此类型一般呈现在多表的 join 查询, 针关于非仅有或非主键索引, 或许是运用了 最左前缀 规矩索引的查询.
  • range 索引的规模查询。查询索引关键字某个规模的值。
  • index 全文索引扫描。与all根本相同,扫描了全文,但查询的字段被索引包含,故不需求读取表中数据,只需求读取索引树中的字段。
  • all 全文扫描。未运用索引,功率最低。

趁便提几个优化留意点:

1、优化insert句子:

1)尽量选用 极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏insert into test values(),(),(),()...
2)假如从不同客户刺进多行,能经过运用insert delayed句子得到更高的速度,delayed意义是让insert句子立刻履行,其实数据都被放在内存行列中个,并没有真实写入磁盘,这比每条句子别离刺进快的多;low_priority刚好相反,在一切其他用户对表的读写完后才进行刺进。
3)将索引文件和数据文件分在不同磁盘上寄存(运用建表句子)
4)假如进行批量刺进,能够添加bulk_insert_buffer_size变量值方法来进步速度,可是只对MyISAM表运用
5)当从一个文本文件装载一个表时,运用load data file,一般比运用insert快20倍

2、优化group by句子:

默许情况下,mysql会对一切group by字段进行排序,这与order by极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏相似。假如查询包含group by但用户想要防止排序成果的耗费,则能够指定order by null制止排序。

3、优化order by句子:

某些情况下,mysql能够运用一个索引满意order by字句,因此不需求额定的排序。where条件和order by运用相同的索引,而且order by的次序和索引的次序相同,而且order by的字段都是升序或许降序。

4、优化嵌套查询:

mysql4.1开端支撑子查询,可是某些情况下,子查询能够被更有功率的join代替,尤其是join的被迫表待带有索引的时分,原因是mysql不需求再内存中创立暂时表来完结这个逻辑上需求两个过程的查询作业。

最终提一个点:

一个表最多16个索引,最大索引长度256字节,索引一般不明显影响刺进功能(很多小数据破例),由于树立索引的时刻开支是O(1)或许O(logN)。不过太多索引也是欠好的,究竟更新之类的操作都需求去保护索引。


后边会共享极彩娱乐 官网平台-详解mysql索引使用率监控技巧,值得保藏更多devops和DBA方面的内容,感兴趣的朋友能够重视下~

请关注微信公众号
微信二维码
不容错过
Powered By Z-BlogPHP