MySql中的索引创建时间

时间:2011-02-08 13:41:22

标签: mysql database indexing

我正在Mysql中设计一个数据库,它将填充大量的原始数据。我想知道我应该在插入数据之前定义索引,或者我应该首先插入我的数据然后创建索引?有什么不同吗? 另外我想知道如果我想在2列上有索引,是将它们单独或一起索引更好吗? 感谢

4 个答案:

答案 0 :(得分:2)

如果你正在进行批量加载,我的意见是没有预先编写索引,这将减慢负载以不断编写索引页,特别是如果更大的数据集。话虽如此,在填充表之后,执行SINGLE语句来构建您期望的所有索引,而不是逐个构建。我很久以前就学到了很多东西。我有一个包含1400多万行的表,不得不建立15个以上的索引。每个指数都比上一个指数更长。它每次都出现一个新的索引,它需要重建之前的页面。一次完成这些工作证明要好得多。

对于多列索引...它取决于您的查询将如何执行。如果许多查询将在WHERE条件中使用一对或多列,则是,在单个索引中使用多个列。

答案 1 :(得分:2)

  

我也想知道如果我想拥有   索引在2列,是否更好   将它们分开或一起索引?

这取决于您的查询。当您有索引(colA,colB)时,如果在查询的WHERE条件中不使用colA,则数据库永远不会使用此索引。如果您有查询WHERE colB = ?,那么您需要一个以此列开头的索引。

index (colA, colB);
WHERE colA = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index

这个会失败:

WHERE colB = ?;

但是......如果你改变了索引中列的顺序:

index (colB, colA); -- different order
WHERE colb = ?; -- can use the index
WHERE colA = ? AND colB = ?; -- can use the index

现在这个人不能使用索引:

WHERE colA = ?;

检查您的查询,使用EXPLAIN并仅创建您真正需要的索引。

答案 2 :(得分:1)

首先插入数据。

如果两列上的索引,无论是作为组合搜索还是个人(在正常的圈子下):

idx_a(fldA + fldB) idx_b(fldB)

的问候, //吨

答案 3 :(得分:1)

通常,当您进行大量数据插入时,您希望以后对其进行索引,这样就不必在插入数据时维护和重建索引,从而加快插入过程。

索引策略完全取决于您打算如何查询数据库。您是要将它们作为一组查询(即在where子句中同时存在)还是作为个体(即在where子句中有一个或另一个)。