在RAM中使用索引的MySQL;为什么磁盘在运行?
我有800M的索引,并告诉MySQL使用1500M的RAM。启动MySQL后,它在Windows7x64上使用1000M 我要执行此查询:在RAM中使用索引的MySQL;为什么磁盘在运行?,mysql,database,optimization,indexing,Mysql,Database,Optimization,Indexing,我有800M的索引,并告诉MySQL使用1500M的RAM。启动MySQL后,它在Windows7x64上使用1000M 我要执行此查询: 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 这将查找所有尚未发货的项目。执行计划告诉我: 我的指数是: 类型\顺序:具有类型
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
这将查找所有尚未发货的项目。执行计划告诉我:
我的指数是:
:具有类型\顺序
和类型
顺序
以order\u type
作为第一个索引值,然后是order
type
type\u-order
,然后用order\u-type
索引挑出少数条目。我预计只有大约1000个未发货的项目,所以这个查询应该非常快,但事实并非如此。磁盘快疯了
我做错了什么?查询显示
选择sometable.*
,因此对于1000个匹配行,将从表中获取1000个字段。无论WHERE
part索引是否完全加载到ram中,都只会有一些帮助。数据字段仍然需要检索。很可能,它们分散在整个磁盘上。因此,当然磁盘将进行一千次小的读取。能否将解释选择添加为文本?图像不太容易阅读。表o中的行数是多少?2500万行。o和oo是同一个表。这个SQL似乎没有多大意义,但我可能错了。在请求oo表中的所有字段时,您对oo.type为NULL的要求似乎是矛盾的。您是如何告诉MySQL使用1500M RAM的?您更改了哪些MySQL的sys参数?