欢迎来到天天文库
浏览记录
ID:24218805
大小:50.50 KB
页数:3页
时间:2018-11-13
《mysql order by索引优化--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、MySQLOrderBy索引优化>> 在一些情况下,MySQL可以直接使用索引来满足一个ORDERBY或GROUPBY子句而无需做额外的排序。尽管ORDERBY不是和索引的顺序准确匹配,索引还是可以被用到,只要不用的索引部分和所有的额外的ORDERBY字段在ySQLOrderBy 下列的几个查询都会使用索引来解决ORDERBY或GROUPBY部分:SELECT*FROMt1ORDERBYkey_part1,key_part2,...;SELECT*FROMt1t1t1ORDERBYkey_part
2、1DESC,key_part2DESC;SELECT*FROMt1ySQLOrderBy 在另一些情况下,MySQL无法使用索引来满足ORDERBY,尽管它会使用索引来找到记录来匹配t1ORDERBYkey1,key2; *在非连续的索引键部分上做ORDERBY:SELECT*FROMt1t1ORDERBYkey_part1DESC,key_part2ASC;*用于搜索记录的索引键和做ORDERBY的不是同一个:SELECT*FROMt1ySQL是否在查询中使用了索引。如果Extra字段的值是Us
3、ingfilesort,则说明MySQL无法使用索引。详情请看7.2.1EXPLAINSyntax(GetInformationAboutaSELECT)。当必须对结果进行排序时,MySQL4.1以前它使用了以下filesort算法: 1.根据索引键读取记录,或者扫描数据表。那些无法匹配ERGEBUFF(7)个区域的块保存在另一个临时文件中。重复这个操作,直到所有在第一个文件的块都放到第二个文件了。 6.重复以上操作,直到剩余的块数量小于MERGEBUFF2(15)。 7.在最后一次多重合并时,
4、只有记录的指针(排序索引键的最后部分)写到结果文件中去。 8.通过读取结果文件中的记录指针来按序读取记录。想要优化这个操作,MySQL将记录指针读取放到一个大的块里,并且使用它来按序读取记录,将记录放到缓冲中。缓冲的大小由系统变量read_rnd_buffer_size的值而定。这个步骤的代码在源文件`sql/records.cc'中。 这个逼近算法的一个问题是,数据库读取了2次记录:一次是估算ySQL4.1及更新版本中,filesort优化算法用于记录中不只包括索引键值和记录的位置,还包
5、括查询中要求的字段。这么做避免了需要2次读取记录。改进的filesort算法做法大致如下: 1.跟以前一样,读取匹配ySQL能否使用索引而非额外的排序过程。如果不能使用索引,可以试着遵循以下策略: *增加sort_buffer_size的值。 *增加read_rnd_buffer_s12下一页>>>>这篇文章来自..,。ize的值。 *修改tmpdir,让它指向一个有很多剩余空间的专用文件系统。 如果使用MySQL4.1或更新,这个选项允许有多个路径用循环的格式。各个路径之间在Unix上用冒
6、号(':')分隔开来,在Windows,NetWare以及OS/2上用分号(';')。可以利用这个特性将负载平均分摊给几个目录。注意:这些路径必须是分布在不同物理磁盘上的目录,而非在同一个物理磁盘上的不同目录。上一页12>>>>这篇文章来自..,。
此文档下载收益归作者所有