如何添加索引,重用一些列?

时间:2016-05-20 20:07:05

标签: mysql indexing

例如,让我们进行查询:

SELECT * FROM users
WHERE parent_id = 1
AND created > '2016-05-06 00:00:00'
ORDER BY updated DESC, created ASC

不会添加以下索引是最好的,以避免使用任何文件排序?:

ADD INDEX `search` (`parent_id` ASC, `created` ASC, `updated` DESC, `created` ASC)

尝试添加索引时,我得到了#34;重复列"。有什么方法可以避免这种情况吗?我目前正在使用相当大的数据集,因此优化是关键。

3 个答案:

答案 0 :(得分:1)

您在索引的定义中指定了两次datetime.datetime列。摆脱第二个,你应该没问题:

created

答案 1 :(得分:1)

SDL_BLENDMODE_ADD是该查询的最佳索引。列必须按此顺序排列(首先INDEX(parent_id, created),然后是'范围')。添加其他列无济于事。

因为您在= constant中混合DESCASC(并且因为您无法将索引声明为ORDER BY),所以无法使用索引避免使用DESC

More discussion

答案 2 :(得分:0)

您不需要两个不同的索引来进行查询和排序。同样适用于两个操作因此,只需从ADD INDEX查询中删除重复的created