說我有兩張桌子。一種叫做typeDB,對於包含索引,類型名稱和另一個表中這些類型的元素的ID列表的行具有這種類型。爲了從第二個表中的行 - 讓叫它dataDB - 0類型,然後我可以基本上做到(拙劣的僞代碼):哪個MySQL查詢將有更快的檢索?
$list = SELECT list FROM typeDB WHERE index=0
然後我可以從dataDB使用獲得的行:
$array = explode($list)
for (every element of list $i)
$results = SELECT * FROM dataDB WHERE index=$array[$i]
所以我的問題是...這是任何速度比僅僅有一個類型字段中dataDB,然後做:
$results = SELECT * FROM dataDB WHERE type=$type
我的想法是,BEC因爲第一種方法不需要通過整個數據庫,它會更快。但我真的不知道數據庫查詢是如何工作的。你認爲哪種方式最有效率?謝謝。
取決於有多少種不同的類型。如果他只爲100個數據元組獲得5種類型,則索引將不會被使用,因爲它只具有<20%的選擇性。但我同意你的回答。使用第二個版本並加入typeDB表。 – Basti 2012-02-21 07:06:15
雖然我會做一個改變,因爲我會在'datatType ON'規範中包含'dataDB.type =「$ type」'來限制連接的行,因爲目前您將連接'dataType'中的所有行即使只有'dataType'的一個子集被請求時,也可以將其轉換爲'dataDB'。不是小桌子的考慮因素,而是桌子增長的良好做法。 – 2012-02-21 08:40:39
嗯有趣的捕獲。我從來沒有真正理解在ON子句中加入額外的條件與WHERE子句之間的區別。 – 2012-02-21 17:21:10