【发布时间】:2013-11-30 01:42:41
【问题描述】:
情况
我有一个名为follow 的表,这是表结构:
- follower_id
- following_id
- when // timestamp
这些是我执行的 SQL 查询:
SELECT * FROM follow WHERE follower_id = ? ORDER BY when LIMIT 0,20
SELECT * FROM follow WHERE following_id = ? ORDER BY when LIMIT 0,20
SELECT * FROM follow WHERE follower_id = ?
SELECT * FROM follow WHERE following_id = ?
这些是我的索引:
follower_id, when
following_id, when
follower_id
following_id
问题
这种方法是真的吗?在数据库中拥有这么多(或更多)的索引有什么缺点吗?
【问题讨论】:
-
索引加速
SELECT,但在INSERT上花费更多。您需要对数据库的性能进行基准测试,看看它们是否有影响。任何其他建议都是猜测。 -
@BoristheSpider 谢谢。看起来索引在增加读取操作的同时减少了
insertupdatedelete之类的写入操作。 -
好吧,反正你不需要最后两个索引。如果您只有 WHERE a = ?,也可以使用 (A, B) 上的索引。因此,前两个索引也可以用于后两个查询。
-
@MarkusWinand 很高兴在这里见到你。谢谢你的建议。我用
when, follower_idindex 怎么样?这是一样的吗? -
@CanGeliş 不,那不一样。见这里:use-the-index-luke.com/sql/where-clause/the-equals-operator/…