Mysql

需要兩個索引嗎?

  • February 20, 2019

我們的 MySQL 數據庫將包含一個百科全書。百科全書將分頁顯示,每頁包含以字母開頭的條目。

我應該使用哪些索引?我是否應該為“標題”欄位設置兩個索引(一個長度為 255 的索引用於排序,一個長度為 1 的索引用於按第一個字母進行索引)?

創建表`百科全書`(
`id` int(10) unsigned NOT NULL auto_increment,
`title` varchar(255) collat​​e utf8_bin NOT NULL,
`article` mediumtext collat​​e utf8_bin NOT NULL,
主鍵(`id`),
KEY `title` (`title`)
) 引擎=InnoDB 預設字元集=utf8 排序=utf8_bin;

好吧,現在我知道長度 1 不足以按第一個字母進行索引,因為 UTF-8 字母可能包含三個字節。

只要您從左側搜尋,索引就可以通過字元子集進行搜尋。例如,“Inter%”可以搜尋,“%net”不能。

但是,第一個字元不一定是文章將被排序的字元。“網際網路”應該放在“I”下面,而不是“T”下面。您可能需要兩個欄位,DisplayTitle並且SortTitle; 後者的單字元索引可能是值得的,但很可能全長索引就可以了。

索引通常是 B 樹,無論您每頁有 10 個還是 100 個條目,搜尋都會以同樣快的速度跳轉到正確的位置。掃描是另一回事,但我會從最簡單的解決方案開始,只有在實踐證明性能不足時才添加額外的索引。

引用自:https://dba.stackexchange.com/questions/19072