在mySql表中有多个索引可以吗?

时间:2012-09-10 22:13:53

标签: mysql indexing

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

Colums:id,info1,info2,option1,option2,option3,option4,date1,date2,userid

所以我的问题是:

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

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

3 个答案:

答案 0 :(得分:0)

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

MySQL通常每个查询每个表只使用一个索引。如果您有4种不同的排序选项,那么通常有一个索引可以覆盖每个排序选项。

IIRC,你不需要(a,b)和(a,b,c)的索引,因为(a,b,c)涵盖两者。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

'指数和使用它们'的概念是一种折衷。它们可以让您在搜索时获得更高的速度,但您必须在其他地方支付费用。许多索引使DML命令花费更长的时间,因为索引应该在每个UPDATE,DELETE和INSERT命令时更新。他们希望在搜索中为您服务,您必须付出代价。索引越多,获得的搜索速度越高,UPDATE和INSERT时间越高。它们应该非常明智地使用和调整。

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

相关问题