MySQL查询成本

时间:2011-02-10 00:42:11

标签: sql mysql optimization benchmarking

有人能告诉我以下查询中昂贵的理论差异吗?

  • SELECT * FROM posts WHERE category IN(1)
  • SELECT * FROM posts WHERE category IN(1,2)
  • SELECT * FROM posts WHERE category IN(1,2,3)

...等......

感谢。

1 个答案:

答案 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 *),因此在处理更多类别时会涉及更多一点,但是不会影响扫描表所需的基准时间。