2010-04-23 68 views
-5

这是一个多指标的问题:是否可以在索引上创建索引?

  1. 有没有一种方法可以创建索引的索引 ?
  2. 为什么要这样呢?
  3. 如果是这样,是否有任何例子?
+12

两条建议:1.让你的问题更清楚,2:接受你的问题的答案 – 2010-04-23 19:53:55

+1

我必须与[@Philippe Leybaert]联合,我发现你有更多有效的输入,当你表明你关心X- )。还有兴趣,请你解释一下**为什么**你想试试这个? – 2010-04-23 20:10:56

回答

10

NO,指数都是为了列索引用于快速找到与特定 列值行的表

How MySQL Uses Indexes

。 没有索引,MySQL必须在第一行开始 ,然后在整个表中读取 以查找 相关行。表越大, 这个成本就越多。如果该表具有 这一列的索引, MySQL可以快速确定 的位置,以在 的中间寻找数据文件,而不必在所有数据文件中查找 。如果一个表有1,000行,则至少比顺序读取快100倍。

+1

我该如何决定何时创建索引或删除索引?我必须经常从8列的表格中访问两列。 (也就是说有些表格有1000行,10000行,100万,2-3百万,500万)。跟索引一起去总是很好吗?创建索引会不会变成一个糟糕的主意? – user319280 2010-04-23 20:02:55

+1

当性能糟糕时应使用索引,而不是10-1000表格的规则。如果您发现查询速度较慢,请查看索引。我从来没有见过有10行表格执行不好的表格,但加入更大的表格(10,000,000)表格可能会给您带来问题。正如那句老话所说的那样,**不要修复它,如果它不破坏** – 2010-04-23 20:08:09

3

在oracle文档中,您可以从create index的语法图中看到它不适用于索引。
我也不能想到你想要的理由。

0

索引已经排序,所以你可能不想创建索引。但是,如果要进行低级编程,则希望将索引的子集存储在内存或磁盘的较小区域中,例如每1024个或每2048个记录,以便您可以先查找并搜索更大的位置索引一条记录在于。

“平方根”规则在这里很有效。所以如果这个表有400万个条目,那就是2048 * 2048(大约)。您可以“加载”2048条记录,然后找到需要加载的主索引的哪个2048记录部分以查找记录,因此总共只加载2个块,而不必在2048个块中进行二进制搜索。

这可能是一个巨大的优化,但它是低级程序员,即数据库工具的开发人员,而不是他们的用户。

相关问题