2014-11-06 38 views
0

在執行時間O(1)中訪問mysql字段假定我們有一個包含一些行的mysql表。我們想檢查某個特定的記錄,比如它的'index'= 0。通過PHP,後作出這樣的查詢「SELECT * FROM MY_TABLE」我們總是使用像mysql_fetch_array的命令,然後用這個結構:如何通過select *並使用php

while ($row = mysql_fetch_array($sql_result)) 
{ 
    if ($row['index'] == 0) 
     return true; 
} 

但這種方法獲取時間爲O(n)。 如何優化這個算法到O(1)? ,然後寫下我們搜索過的整個行?

請注意,我想通過php找到特定的行,而不是像SELECT ... WHERE index = 1那樣的sql。 換句話說,我想從mysql_fetch_array產生的數組中獲取行。

+3

「我們總是使用像mysql_fetch_array這樣的命令」。我們總是使用mysqli_ *或PDO代替mysql_ *函數,因爲mysql_ *函數已被棄用。 – vaso123 2014-11-06 13:37:00

+1

像@ @ lolka_bolka說,請閱讀[這個問題。](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php) – Vanitas 2014-11-06 13:38:16

+0

你可以使用'LIMIT'來做這個,例如'SELECT * FROM My_table ORDER BY ID LIMIT 120,1;'將返回第120行。 A **非常重要的一點是,SQL中的數據沒有隱式順序,爲了使「行20」具有任何意義,您必須**提供一個「ORDER BY」子句。 – GarethD 2014-11-06 13:39:53

回答

2

你不行。最好的情況是O(n),因爲你必須一次迭代所有的項目,不管你是否遍歷它們來構建一個哈希表,然後查詢它(這將至少需要O(n)in總計),或者您只是在找到該物品時返回。

如果要多次查詢結構,構建散列仍然至少爲O(n),但查詢將爲O(1)(理論上)。

但是,這是一個真正使用數據庫的好處 - 檢索信息並有條件地執行 - 是適當的解決方案。數據庫引擎可以具有索引,以幫助使信息檢索接近O(1)(如果數據庫引擎構建散列或二進制查找結構(O(ln n)))。