Mysql
需要兩個索引嗎?
我們的 MySQL 數據庫將包含一個百科全書。百科全書將分頁顯示,每頁包含以字母開頭的條目。
我應該使用哪些索引?我是否應該為“標題”欄位設置兩個索引(一個長度為 255 的索引用於排序,一個長度為 1 的索引用於按第一個字母進行索引)?
創建表`百科全書`( `id` int(10) unsigned NOT NULL auto_increment, `title` varchar(255) collate utf8_bin NOT NULL, `article` mediumtext collate utf8_bin NOT NULL, 主鍵(`id`), KEY `title` (`title`) ) 引擎=InnoDB 預設字元集=utf8 排序=utf8_bin;
好吧,現在我知道長度 1 不足以按第一個字母進行索引,因為 UTF-8 字母可能包含三個字節。
只要您從左側搜尋,索引就可以通過字元子集進行搜尋。例如,“Inter%”可以搜尋,“%net”不能。
但是,第一個字元不一定是文章將被排序的字元。“網際網路”應該放在“I”下面,而不是“T”下面。您可能需要兩個欄位,
DisplayTitle
並且SortTitle
; 後者的單字元索引可能是值得的,但很可能全長索引就可以了。索引通常是 B 樹,無論您每頁有 10 個還是 100 個條目,搜尋都會以同樣快的速度跳轉到正確的位置。掃描是另一回事,但我會從最簡單的解決方案開始,只有在實踐證明性能不足時才添加額外的索引。