Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RAM中使用索引的MySQL;为什么磁盘在运行?_Mysql_Database_Optimization_Indexing - Fatal编程技术网

在RAM中使用索引的MySQL;为什么磁盘在运行?

在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 这将查找所有尚未发货的项目。执行计划告诉我: 我的指数是: 类型\顺序:具有类型

我有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
这将查找所有尚未发货的项目。执行计划告诉我:

我的指数是:

  • 类型\顺序
    :具有
    类型
    顺序
  • order\u type
    order
    作为第一个索引值,然后是
    type
所以MySQL应该使用RAM中的索引
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参数?