2010-07-20 107 views
1

我有一些关于数据库索引的一般问题。等待任何问题的答案:mysql索引大小和重复问题

  1. 如何计算索引占用的总内存大小。是指数的大小与其Cardinality成正比吗?

  2. 我们需要索引主键,还是索引它自己的索引。如果主键被索引了两次(在创建表时自动执行,然后用不同的名称手动执行),它将如何影响选择,插入和更新查询的内存和处理速度?

  3. 我们可以在使用组合索引时安排或控制seq_in_index。如果是的话,在个别指数的基数方面做什么最好的方法是什么?

非常感谢!

回答

0

一个古老的问题,我很惊讶没有答案。我会采取刺。

  1. 表中的所有索引的总大小可以通过“SHOW TABLE STATUS”来看到。我担心我不知道如何获得单个索引的真实大小,但它可能与所用列的大小和指向该行的指针一样简单。索引的大小取决于行数和索引的宽度。由于每行都必须出现在索引中,因此基数应该没有关系。
  2. 主键自动获取索引。记住它是一个唯一的索引,不允许有NULL(与“普通”索引相比)。除非在封面下方的mysql很智能,否则创建第二个索引将创建第二个索引。每个附加索引占用空间(磁盘/内存)和时间(插入/更新/删除)。
  3. 是的,您可以控制组合索引中的序列。我使索引(至少)匹配WHERE子句(包括连接),如果可能,包括从该表中SELECTED的列,以便可以从索引收集所有内容,并且不需要读取底层行。至于基数,尽可能快地去除尽可能多的行。

希望有所帮助。