这是一个我永远拥有的问题。MySQL索引和订单
据我所知,指数的顺序很重要。所以像[first_name, last_name]
这样的索引与[last_name, first_name]
不一样吧?
如果我只定义了第一个指数,它意味着它将只用于
SELECT * FROM table WHERE first_name="john" AND last_name="doe";
而不是
SELECT * FROM table WHERE last_name="doe" AND first_name="john";
由于我使用的是ORM,我在不知道这些命令将命令这些列将被调用。这是否意味着我必须在所有排列上添加索引?如果我有2列索引,这是可行的,但如果我的索引是3列或4列,会发生什么?
所以我猜SELECT * FROM table WHERE last_name =“doe”AND first_name =“john”不会? 如果是这样的话,那么因为所有的查询建筑物都被我的ORM隐藏起来了,所以我可能必须定义2个索引...真的很糟糕,因为我有3列的索引来定义...... – 2009-08-09 21:11:34
不,你误会了。 WHERE'last_name' =“doe”AND'first_name' =“john”查询可以使用('first_name','last_name')或('last_name','first_name')索引。 – ChssPly76 2009-08-09 21:22:07
一个问题:对于具有2 AND条件的查询,它是否重要,速度明智,它的索引与查询中的条件相比是否“反向”,或者取决于这些列的基数? – Mihai 2014-11-12 21:52:25