当我使用像唯一键(element1,element2)这样的内容时它是如何工作的?

时间:2010-12-15 17:54:10

标签: sql mysql

  1. 如果我说index(element1), index(element2)它使用了很多 空间小于unique key(element1,element2)
  2. 我知道他们做的不同。我的 理解是unique key(element1,element2)确保了这一点 那些没有重复 2行是相同的。这是 正确的吗?
  3. 它是否仍然为两个键编制索引 单独?
  4. 但这是否昂贵 磁盘空间和检查创建 这样和索引?
  5. 如果没有它可能会更好 没有关键并不重要 重复?

1 个答案:

答案 0 :(得分:3)

  1. INDEX(a,b)比两个索引INDEX(a)和INDEX(b)使用更少的空间,因为每个索引由该列和主键的(一部分)组成。但请阅读以下关于这些指数之间功能差异的说明。
  2. 正确。 UNIQUE KEY使得没有2行具有该键中列的相同值。
  3. UNIQUE INDEX也是一个INDEX,可用于搜索。 UNIQUE KEY的一个特例是PRIMARY KEY。
  4. 索引会占用磁盘空间,具体取决于您的存储引擎。如果您的应用程序是大量写入的(如日志记录表),有时可能更好的是没有索引。大多数表格可能读得很重。
  5. 从逻辑的角度来看,如果不重要,没有重复,请不要放置索引。
  6. 编辑:详细说明pst的评论:

    如果您有INDEX(A)INDEX(B)INDEX(A,B),则INDEX(A)是多余的。算了吧 但INDEX(A,B)不包含仅在B上搜索的查询,您需要INDEX(B)

    您可以论证INDEX(A)INDEX(B)一起可以使用MySQL的INDEX MERGE来构建INDEX(A,B)。这使您可以选择

    1. INDEX(A,B)INDEX(B)
    2. INDEX(A)INDEX(B)
    3. 解决方案2将占用更少的磁盘空间,这是事实。但请阅读关于INDEX MERGE的Very Nice MySQLPerformanceBlog article,得出这个结论:

        

      总结:使用多列索引   如果您使用AND,通常是最好的主意   在where子句中的这些列之间。   索引合并确实有助于提高性能   它远远没有结合的表现   在这种情况下索引。万一你是   在列之间使用OR - 单个   索引需要列索引   合并工作和组合索引   不能用于此类查询。