【发布时间】:2017-02-10 15:16:08
【问题描述】:
SELECT post_id FROM posts WHERE blog_id IN (15,16) ORDER BY post_id DESC
post_id是PRIMARY,blog_id是index,table是innoDB,DB是MariaDB。
这会导致文件排序,因为索引 blog_id 被用作键。 Blog_id 必须是一个索引,因为当我只搜索一个 blog_id=15 进行查询时,它会更快。如果 blog_id 不是索引或者我使用 FORCE INDEX (PRIMARY) 问题就解决了,查询也更快了。
问题是我认为你不应该在生产应用程序中使用 FORCE INDEX,也不应该使用 INDEX?这将是第一个问题,我可以强制索引并称之为已解决吗?
第二个问题是为什么它在这里进行文件排序。如果我理解正确的话,一个索引有两个键,索引键和主键,索引是按主键排序的吗?我猜不是因为如果是这样,那么第一个查询应该能够在没有文件排序的情况下按索引进行搜索和按主排序。但是它在只搜索一个 id 时不使用文件排序,我不明白为什么它与多个 id 不同。所以我不知道为什么会这样。
【问题讨论】:
-
查看重复查询的答案。