有人能告诉我以下查询中昂贵的理论差异吗?
SELECT * FROM posts WHERE category IN(1)
SELECT * FROM posts WHERE category IN(1,2)
SELECT * FROM posts WHERE category IN(1,2,3)
...等......
感谢。
答案 0 :(得分:1)
理论上,如果你有类别的索引并且表格足够大且索引是选择性的,那么
Cost for 1st as baseline = N
Cost of 2nd = 2 x N
Cost of 3rd = 3 x N
如果没有索引或索引没有足够的选择性(例如,category = 1覆盖表的10%),那么它将执行表扫描。如果表很小,它甚至不会打扰使用索引。在这种情况下
Cost of 1st as baseline = N + X
Cost of 2nd = N + 2X
Cost of 3rd = N + 3X
原因是全表扫描的成本为N.在扫描期间,它将使用X时间挑出整行(select *
),因此在处理更多类别时会涉及更多一点,但是不会影响扫描表所需的基准时间。