我想知道以下兩個操作的複雜程度。第一種情況是一個計數,其中我被列順序,我上有一個索引,並要求低於或高於特定數量的這樣的所有值的計數:是關於中值運算在MySQL中查找中位數和計數的複雜性是什麼?
SELECT count(*) FROM tbl WHERE col1 > 10 ORDER BY col1;
另一種情況。按照中位數我的意思是找到(int)n/2的行值,其中n是表中的行數。這方面的例子可能是由以下(同樣有在col1的索引):
SELECT median(col1) FROM tbl ORDER BY col1;
什麼是這些案件的最壞情況的複雜性?
在SQL標準中沒有任何要求count(*)是O(n)的東西。如果DBMS選擇按照表格元數據存儲行數,那麼它是O(1)。即使where子句不一定會使它成爲O(n),因爲有O(1)種方法可以找到第一個「11」記錄的邏輯記錄,然後從count中減去。 – paxdiablo 2009-02-20 04:13:33