【问题标题】:Is it ok to have many indexes in a mySql table?mySql 表中可以有很多索引吗?
【发布时间】:2012-09-11 07:08:35
【问题描述】:

我有一些字段有 4 种不同的排序选项。在不同的情况下,字段按这 4 个选项和 2 个日期和用户 ID 进行排序或过滤。让我们假设这些列是:

列:id、info1、info2、option1、option2、option3、option4、date1、date2、userid

所以我的问题是这样的:

一个表中是否可以有 7 个不同的索引(option1、option2、option3、option4、date1、date2、userid)?它对大型数据库中的数据库读写性能有影响吗?

如果是,您有什么建议作为解决方案?

【问题讨论】:

    标签: mysql indexing


    【解决方案1】:

    在插入或更新表时需要更新索引。因此,索引越多,这些操作就会越慢。

    MySQL 通常在每个查询中每个表只使用一个索引。如果您有 4 种不同的排序选项,通常有一个涵盖每个排序选项的索引是有意义的。

    IIRC,您不需要在 (a,b) 和 (a,b,c) 上建立索引,因为 (a,b,c) 涵盖了两者。

    【讨论】:

      【解决方案2】:

      “指数和使用它们”的概念是一种权衡。它们可以使您的搜索速度更快,但您必须在其他地方支付费用。许多索引使 DML 命令花费更长的时间,因为索引应该在每个 UPDATE、DELETE 和 INSERT 命令时更新。他们想在搜索中为您服务,而您必须付出代价。您拥有的索引越多,您获得的搜索速度就越高,UPDATE 和 INSERT 时间也就越长。应该非常明智地使用和调整它们。

      您也可以在标准化中看到这种成本效益。您获得了规范化、更好的分析能力和广泛传播的数据,您应该为收集和加入这些数据付费。

      【讨论】:

        【解决方案3】:

        每当您执行CREATEUPDATEDELETE 时,都需要更新索引。因此,您应该根据SELECT 语句的集中度来限制您的索引。您还需要对索引的工作原理有一个基本的了解,例如,如果您有一个复合索引(c1, c2),而您运行的查询只选择了c2,那么它是没有用的。您可能还想考虑创建 VIEW 而不是索引。

        【讨论】:

        • 读取时更新索引?此外,MySQLVIEWs 的支持非常糟糕,不要指望它们有助于提高性能。即使这样,您也需要索引来以任何速度查询视图。两者永远不能互换。
        • @Naltharial 感谢您的关注。我更多地接触了 MSSQL,它在视图方面表现出色。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 2017-06-20
        • 2012-08-26
        • 2020-10-09
        • 2019-08-28
        • 2022-12-29
        • 1970-01-01
        相关资源
        最近更新 更多