【问题标题】:mysql - good pratice: table with more then one index?mysql - 良好实践:具有多个索引的表?
【发布时间】:2010-09-13 11:47:26
【问题描述】:

对不起,

我确实有这个包含 3 列的迷你表,但我将按一列或另一列列出值。

1) 可以让其中两列有索引吗?

2) 我们应该每个表只有一个索引吗?

3) 在极限情况下,例如,如果我们有一个包含 100 列的表,其中有 50 个带有索引,这样可以吗?

谢谢, 内存

【问题讨论】:

    标签: mysql database-indexes


    【解决方案1】:

    可以有很多索引,甚至一张表上有多个索引,只要你在使用它们

    对您的查询运行 EXPLAIN 并检查正在使用哪些索引。如果有没有被任何查询使用的索引,那么它们不会给您带来任何好处,只会减慢对表的修改速度。应该删除这些未使用的索引。

    如果您还没有这样做,您可能还想考虑多列索引。

    【讨论】:

    • 非常感谢您的澄清。 :)
    • 我明白了...我试图更好地理解我们何时应该有两个索引或使用一个多重索引背后的基本原理。对于同时获取名字和姓氏的名称索引,这是有道理的......但我必须看到更多关于它的例子。感谢在如此简单的问题上提供这两个新事物。 ;) 解释和多列索引。 :D
    • 这是个好建议,很多人只是索引所有字段,甚至不考虑使用多个索引。马克,如果你有很多索引,你会碰巧知道更新时它会减慢表的速度吗?
    【解决方案2】:

    为了快速回答您的问题,我认为:

    1. 是的,有两个甚至更多列有索引是可以的
    2. 不一定。每个表可以有多个索引。
    3. 可能没问题,也可能不太好。这取决于。索引的问题是它们占用空间(在磁盘中)并且它们使修改数据(插入/更新/删除)的操作变慢,因为对于每个人来说,都会有一个表涉及 INDEX 更新。

    您的索引创建应该由您的查询驱动。查看您将在系统上进行哪些查询并相应地创建索引。

    【讨论】:

    • 清除。因此,就像 Mark Byers 建议的那样,EXPLAIN(我不知道)可以用于这种确定。谢谢你的时间回答。 :)
    • 是的!解释是你的朋友!在 MySQL 和几乎所有其他关系数据库服务器中......
    【解决方案3】:

    每个表有多个索引没有问题,不,每个表一个索引并不是真正的准则。

    索引过多是低效的,因为

    • 它需要额外的存储空间
    • MySQL 需要确定用于特定查询的索引

    编辑:按照 Pablo 和 Mark 的说法,您需要了解如何您的数据被访问,以便您构建有效的索引。然后,您可以优化和减少索引。

    【讨论】:

    • 谢谢。所以性能和空间。似乎是问题所在。所有的答案似乎都指向这个方向。 :) 非常感谢。
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 2011-12-13
    • 2012-06-15
    • 1970-01-01
    • 2012-03-04
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多