【发布时间】:2011-06-17 15:04:41
【问题描述】:
当我使用 Mysql 时,我试图更好地理解索引。一个问题是我仍然很难确定应该使用哪种类型的索引,例如单个索引、多列索引、覆盖索引等。
我的一个问题是,是否有一个通用规则来决定使用哪种类型的索引?当我设计我的数据库布局时,在应用程序构建完成之前,我并不确切知道所有查询将被使用。对于一张表,我可以查询一个或多个字段,也可以查询它以进行报告。所以如果我像这样查询一个表:
SELECT * FROM table1 WHERE field1 = this AND field2 = that GROUP BY field3 ORDER BY field4
是否要在 field1、field3、field3 和 field4 上创建多列索引?
如果我在同一张表上有不同的查询,例如:
SELECT * FROM table1 WHERE field1 = this and field3 = that
如果我有来自第一个查询的多列索引,由于 field1 位于索引的最左侧,第二个查询是否会使用相同的索引?
我的另一个问题是mysql查找索引是否有特定的顺序?那么对于多列或覆盖索引,我是否按 where 子句的顺序添加索引?然后是 group 子句中的任何内容,然后是 order 子句中的任何内容?还是mysql会自动做这个?
抱歉所有问题,只是在这方面寻求帮助。
【问题讨论】:
标签: mysql performance database-design indexing