有人能告诉我以下查询昂贵的理论上的区别吗?
SELECT * FROM posts WHERE category IN(1) SELECT * FROM posts WHERE category IN(1,2) SELECT * FROM posts WHERE category IN(1,2,3) ..。等等..。
谢谢。
发布于 2011-02-10 00:44:37
从理论上讲,如果您有一个类别索引,并且表足够大,而且索引是选择性的,那么
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 *),因此在处理更多的类别时会涉及更多的内容,但不会影响扫描表所需的基线时间。
https://stackoverflow.com/questions/4952231
复制相似问题