【发布时间】:2010-11-25 00:21:33
【问题描述】:
在 1 百万的 tb 中。如果我这样做了行(在我重新启动计算机之后 - 所以它没有被缓存):1. SELECT price,city,state FROM tb1 WHERE zipId=13458;
结果是 0.270 秒内 23 行
在我运行“LOAD INDEX INTO CACHE tb1”后(key_buffer_size=128M 并且 tb 的总索引大小为 82M):
2. SELECT price,city,state FROM tb1 WHERE zipId=24781;
结果是 23rows in 0.252s,Key_reads 保持不变,Key_read_requests 增加 23
BUT 将“zipId”加载到操作系统缓存后,如果我再次运行查询:2. SELECT price,city,state FROM tb1 WHERE zipId=20548;
结果是 0.006 秒内 22 行
这只是一个简单的例子,但我运行了数十个测试和组合。但结果总是一样的。
我用的是:MySql with MyISAM,WINDOWS 7 64,query_cache为0;
zipId 它是一个常规索引(不是主键)
key_cache 不应该比操作系统缓存快吗??
将索引加载到缓存后,速度应该不会有很大差异??
(在我的测试中几乎没有区别)。
我已经阅读了很多关于这个问题的网站、教程和博客,但没有一个真正讨论速度的差异。因此,任何想法或链接将不胜感激。
谢谢。
【问题讨论】:
-
什么是桌子设计?如果使用的索引不涵盖 sipid、价格、城市和州,则 Key Cache 不会很快。否则查询会先读取索引,然后再读取表。
-
@Thomas Jones-Low 该索引涵盖所有 3 列。我已经进行了一些测试,如果我选择 1 或 3 col 并没有显着差异。或者,如果选定的列是否被索引
-
@Thomas Jones-Low 还有为什么同样的查询在操作系统缓存的情况下要快得多、快得多? (基本上都是一样的步骤)
标签: mysql caching performance indexing key-cache-size