mysql如何查看索引使用情况以及优化 - guols0612

mysql中支持hash和btree索引。innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引

我们可以通过下面语句查询当前索引使用情况:

show status like ‘%Handler_read%‘;

+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 0 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 0 |
+-----------------------+-------+

如果索引正在工作,则Handler_read_key的值会很高,这个值代表一个行被索引值读的次数,很低值表名增加索引得到的性能改善不高,因此索引并不经常使用

如果Handler_read_rnd_next值很高意味着查询运行效率很低,应该建立索引补救,这个值含义是在数据文件中读取下一行的请求数。如果正在进行大量表扫描,Handler_read_rnd_next的数值将会很高。说明索引不正确或者没有利用索引。

优化:

优化insert语句:

1.尽量采用 insert into test values(),(),(),()...

2.如果从不同客户插入多行,能通过使用insert
delayed语句得到更高的速度,delayed含义是让insert语句马上执行,其实数据都被放在内存队列中个,并没有真正写入磁盘,这比每条语句分别插入快的多;low_priority刚好相反,在所有其他用户对表的读写完后才进行插入。

3.将索引文件和数据文件分在不同磁盘上存放(利用建表语句)

4.如果进行批量插入,可以增加bulk_insert_buffer_size变量值方法来提高速度,但是只对MyISAM表使用

5.当从一个文本文件装载一个表时,使用load data file,通常比使用insert快20倍

优化group by语句:

默认情况下,mysql会对所有group by字段进行排序,这与order by类似。如果查询包括group by但用户想要避免排序结果的消耗,则可以指定order by null禁止排序。

优化order by语句:

某些情况下,mysql可以使用一个索引满足order by字句,因而不需要额外的排序。where条件和order by使用相同的索引,并且order by的顺序和索引的顺序相同,并且order by的字段都是升序或者降序。

优化嵌套查询:

mysql4.1开始支持子查询,但是某些情况下,子查询可以被更有效率的join替代,尤其是join的被动表待带有索引的时候,原因是mysql不需要再内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作。

posted on
请注意,本站信息均收集自互联网,相关信息仅供参考,医疗等重要信息请以正规途径为最终意见,本站不承担任何责任!

分享到:QQ空间新浪微博腾讯微博人人网微信

相关信息

更多关于 mysql如何查看索引使用情况以及优化 的信息>>

您可能还关注

热门图片

    浏览器不支持嵌入式框架,或被配置为不显示嵌入式框架。

时间: 2024-08-08 09:41:28

mysql如何查看索引使用情况以及优化 - guols0612的相关文章

mysql如何查看索引使用情况以及优化

mysql中支持hash和btree索引.innodb和myisam只支持btree索引,而memory和heap存储引擎可以支持hash和btree索引 我们可以通过下面语句查询当前索引使用情况: show status like '%Handler_read%'; +-----------------------+-------+| Variable_name | Value |+-----------------------+-------+| Handler_read_first | 0

mysql中查看索引是否被使用到

http://blog.sina.com.cn/s/blog_5037eacb0102vm5c.html 官方MySQL中查看索引是否被使用到: 在percona版本或marida中可以通过 information_schea.index_statistics查看得到, 在官方版本中如何查看呢? select object_type,object_schema,object_name,index_name,count_star,count_read,COUNT_FETCH from perfor

sqlserver查看索引使用情况以及建立丢失的索引

--查看表的索引使用情况SELECT TOP 1000o.name AS 表名, i.name AS 索引名, i.index_id AS 索引id, dm_ius.user_seeks AS 搜索次数, dm_ius.user_scans AS 扫描次数, dm_ius.user_lookups AS 查找次数, dm_ius.user_updates AS 更新次数, p.TableRows as 表行数, 'DROP INDEX ' + QUOTENAME(i.name)+ ' ON '

【基本优化实践】【1.2】索引优化——查看堆表、查看索引使用情况、查看索引碎片率

[1]查看堆表 --查看堆表且行大于等于10W的 select * from ( SELECT tables.NAME, (SELECT rows FROM sys.partitions WHERE object_id = tables.object_id AND index_id = 0 -- 0 is for heap -- 1 is for clustered index And rows >=100000 )AS numberofrows FROM db_tank.sys.tables

mysql 查看索引使用情况

show status like 'Handler_read%'; Handler_read_key  代表着一个行被索引值读取的次数,值很低表明索引不经常用到,增加索引对性能改善不高. Handler_read_rnd_text  代表着在数据文件中读取下一行的请求数,如果进行大量的表扫描,Handler_read_rnd_next的会很高,说明表索引不正确或写入的查询没有利用索引.

SQL SERVER查看索引使用情况

SELECT DISTINCT DB_NAME() AS N'db_name' , E.name AS N'schema_name' , OBJECT_NAME(a.object_id) AS N'table_name' , b.name N'index_name' , user_seeks N'seek' , user_scans N'scan' , last_user_seek , last_user_scan , rows FROM sys.dm_db_index_usage_stats

mysql中索引利用情况(explain用法)

使用explain查看,如下 1.首先创建表test,语句如下 [sql] view plaincopy create table test(a int,b varchar(10),c varchar(10)); 2.在表中的a,b都创建索引,先后顺序是a,b [sql] view plaincopy create index idx_a_b on test(a,b); 3.分别往里面插入三条数据,插入后结果如下: 4.使用explain查询,查看索引使用情况(这里还可以进行多次其他sql语句的

MySQL优化器不使用索引的情况

优化器选择不适用索引的情况 有时候,有乎其并没有选择索引而去查找数据,而是通过扫描聚集索引,也就是直接进行全表的扫描来得到数据.这种情况多发生于范围查找.JOIN链接操作等情况.例如 SELECT * FROM orderdetails WHERE orderid>10000 and orderid<102000; 通过SHOW INDEX FROM orderdetails可以看到 可以看到orderdetails有(orderID,ProductID)的联合主键.此外还有对于列OrderI

mysql索引使用策略及优化

原文地址:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 索引使用策略及优化 MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization).本章讨论的高性能索引策略主要属于结构优化范畴.本章的内容完全基于上文的理论基础,实际上一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑. 示例数据库 为了讨论索引策略,需