我正在阅读关于索引和索引策略的电子书章节,我已经知道了很多这些方面,但我坚持在InnoDB中的聚簇索引,这里是引用:
群集为I / O绑定工作负载提供了最大的改进。如果 数据在内存中适合它访问的顺序 真的很重要,因此聚类不会带来太多好处。
我相信这是事实,但我怎么猜测数据是否适合内存?数据库如何决定何时在内存中处理数据,何时不在?
我们假设我们有一个表 Emp ,其中列 ID ,名称和电话填写了100 000条记录
例如,如果我将聚集索引放在 ID 列上,并执行此查询
SELECT * FROM Employee;
我如何知道这是否会使用聚集索引带来的好处?
它以某种方式相对于这个线程 Difference between In memory databases and disk memory database
但我不确定数据库的行为方式
答案 0 :(得分:1)
您的示例可能是20MB。
"在记忆中"真的意味着"在InnoDB buffer_pool"中,其大小由innodb_buffer_pool_size
控制,应该设置为可用 RAM的大约70%。
如果您的查询命中磁盘而不是在buffer_pool中找到缓存的所有内容,它将运行(这只是一个经验法则)10倍。
你在说什么"聚集索引"是误导。让我扭转局面......
PRIMARY KEY
。UNIQUE
。id INT UNSIGNED NOT NULL AUTO_INCREMENT
。真正的问题不是某些东西是集群的,而是它是否缓存在RAM中。 (记住10倍RoT。)
PRIMARY KEY
或其他类型的INDEX
时会发生这种情况。)数据库如何决定何时在内存中处理数据,何时不在?
那也是错误的'所有处理都在内存中。在逐块的基础上,表和索引的各个部分被移入/移出buffer_pool。块(在InnoDB中)是16KB。而buffer_pool是一个"缓存"这些街区。
SELECT * FROM Employee;
很简单,但成本很高。它的运作方式如下:
Employee
(如果尚未打开 - 另外一个'缓存'处理此问题。)如果您有WHERE
子句,事情会变得更有趣。然后它取决于是否涉及PK或其他INDEX
。
Etc等。