我有800米的指数,并告诉MySQL使用1500米内存。启动MySQL后,它在Windows7 x64上使用1000米。
我想执行以下查询:
SELECT oo.* FROM table o
LEFT JOIN table oo ON (oo.order = o.order AND oo.type="SHIPPED")
WHERE o.type="ORDERED" and oo.type IS NULL这会发现所有尚未发运的物品。执行计划告诉我如下:

我的指数是:
type_order:多个索引,其中type和orderorder_type以order作为第一个索引值,然后是type因此,MySQL应该使用内存中的索引type_order,然后使用order_type索引选择少数条目。我预计只有大约1000个非发货项目,所以这个查询应该非常快,但它不是。磁盘正变得疯狂.
我做错了什么?
发布于 2011-12-22 16:52:28
查询的名称是SELECT sometable.*,因此对于1000行匹配的行,表中的所有字段都会有1000个取回。是否将WHERE部件索引完全加载到ram中只会有帮助。数据字段仍需检索。很有可能,它们散落在磁盘上。因此,当然,磁盘将执行一千次小读取。
https://stackoverflow.com/questions/5068609
复制相似问题