您好,登录后才能下订单哦!
MySql数据库中怎么对索引进行优化?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
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不需要再内存中创建临时表来完成这个逻辑上需要两个步骤的查询工作。
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。