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