2017-01-20 110 views
1

當我知道主鍵時,檢查記錄是否存在的最快方法是什麼? select,count,filter,where還是別的?檢查記錄是否存在的最快方法

+0

'COUNT(ID)FROM表WHERE table.id =「KEY」'可能是理想的,因爲它會利用任何部分查詢的能力(特別快柱狀數據庫,如亞馬遜的紅移)和主鍵索引。 – TemporalWolf

+0

最快的方法是在指定的選項中使用計數。爲了更加原始,通過維護用戶定義的哈希列表,直接從sqlite源使用sqlite3_column_count()。 – Jerry

回答

1

你可以通過EXPLAIN QUERY PLAN來檢查你自己,它會告訴你成本&它打算爲特定查詢做什麼。

費用不會直接比較運行,但您應該瞭解是否有任何重大差異。

話雖這麼說,我希望COUNT(id) FROM table WHERE table.id="KEY"可能是理想的,因爲它會利用任何部分查詢的能力(特別是在快像columnar databases亞馬遜的紅移)和主鍵索引。

1

當您使用count時,即使數據庫找到記錄,也必須繼續搜索,因爲可能存在第二個記錄。 所以你應該搜索實際的記錄,並告訴數據庫在第一個之後停止。

當您要求從記錄中返回數據時,數據庫必須從表中讀取該數據。但是,如果可以通過在索引中查找ID來查找記錄,則該表訪問將是多餘的。 所以,你應該返回什麼,但你使用搜索ID:

SELECT id FROM MyTable WHERE id = ? LIMIT 1; 

反正不是讀書當您使用存在,這是peewee簡單的實際數據和極限的表現:

SELECT EXISTS (SELECT * FROM MyTable WHERE id = ?); 
MyTable.select().where(MyTable.id == x).exists() 
相關問題