所以我在很多小型項目中使用過MySQL,然而,我並沒有接管一個企業級的項目,現在速度很重要,不僅僅是獲得正確的信息。我搜索了很多東西,試圖瞭解索引如何使我的網站更快,我希望進一步瞭解它們是如何工作的,而不僅僅是何時使用它們。字符串SQL索引有用嗎?
所以,我發現自己做了很多SELECT DISTINCTS以獲得所有不同的值,所以我可以填充我的下拉列表。我聽說如果這一欄被編入索引,這將會更快;然而,我不完全明白爲什麼。如果這些列中的值是整數,我完全理解;基本上會創建一個類似於BST的數據結構,搜索時間可能是Log(n);但是,如果我的列是字符串,它如何將一個字符串放入BST?這似乎不可能,因爲沒有度量標準來比較字符串與另一個字符串(就像數字一樣)。看起來索引似乎只是爲該列創建了所有可能值的列表,但似乎搜索仍需要數據庫遍歷每一行,從而使此搜索成爲線性,就像剛剛掃描的數據庫一樣一張正規的桌子。
我的第二個問題是數據庫在索引數據結構中找到正確的值後會做什麼。例如,假設我正在做一個where age = 42的數據庫。因此,數據庫會遍歷數據結構,直到它找到42,但是它如何將查找映射到整行?索引是否有某種與其相關的行號?
最後,如果我正在做這些頻繁的SELECT DISTINCT語句,是否添加索引幫助?我覺得這一定是網站的常見任務,因爲許多網站都有可以過濾結果的下拉菜單,我只是想弄清楚我是否正確地採用了這種方式。
在此先感謝。
爲什麼沒有比較字符串與另一個字符串的指標?當然有:字母順序!這在unicode中甚至是有意義的。 – arkascha
我想提出一個建議:既然你不相信字符串類型列上的索引是有意義的,爲什麼不簡單地寫一個小的測試用例來嘗試呢?你會感到驚訝!也許這有助於相信字符串_do_上的索引是有意義的。 – arkascha
同意了,試試吧。字符串索引可以很好。 – markg