在阅读“高性能MySQL第二版”的“优化排序”部分时,我发现很难理解以下内容:
mysql>从性别=‘M’按等级限制为100000,10;的配置文件中选择 无论如何编制索引,这样的查询都可能是一个严重的问题,因为高偏移量要求他们花费大部分时间扫描大量数据,然后将其丢弃。 ..。 优化此类查询的另一个好策略是使用覆盖索引来检索最终将检索的行的主键列。..。下面是一个需要对(性别、评级)进行有效工作的索引的例子:mysql>SELECT (cols)来自概要文件内部联接( ) 从配置文件( -> )中选择(主键) ->,其中x.sex='M‘级,按等级限制为100000,10 ->)作为x使用(主键科尔);
我的问题是,如果第一个查询不能使用(性别等级)索引来查找行100000-100010,那么第二个查询将如何处理?
发布于 2013-06-06 03:20:07
摘自“高性能MySQL第二版”
无论如何编制索引,这样的查询都可能是一个严重的问题,因为高偏移量要求他们花费大部分时间扫描大量数据,然后将其丢弃。反错、预计算和缓存可能是唯一适用于这种查询的策略。更好的策略是限制允许用户查看的页面数。这不太可能影响用户的体验,因为没有人真正关心第10,000页的搜索结果。 优化此类查询的另一个好策略是使用覆盖索引来检索最终将检索的行的主键列。然后,您可以将它加入到表中,以检索所有想要的列。这有助于最小化MySQL必须完成的收集数据的工作量,因为收集数据只会丢弃。
有人说,这一查询没有任何更好的改进。它只是建议尽量减少只选择index
列的列数(当然,为了节省存储10,0000行的所有列的所有数据的内存,在扫描过程中只存储10,000行的索引列)。然后使用10个检索到的索引来构造完整的列。
https://stackoverflow.com/questions/16952861
复制相似问题