需要两个索引吗?

por*_*ton 6 mysql innodb index index-tuning sorting

我们的 MySQL 数据库将包含一个百科全书。百科全书将显示在每个页面都包含从一个字母开始的条目的页面中。

我应该使用哪些索引?我应该为字段“标题”设置两个索引(一个长度为 255 的索引用于排序,一个长度为 1 的索引用于按第一个字母进行索引)?

创建表`cyclopedy`(
  `id` int(10) unsigned NOT NULL auto_increment,
  `title` varchar(255) 整理 utf8_bin NOT NULL,
  `article` mediumtext collat​​e utf8_bin NOT NULL,
  主键(`id`),
  KEY `title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

好吧,现在我明白长度 1 不足以按第一个字母进行索引,因为 UTF-8 字母可能由三个字节组成。

Jon*_*des 7

只要您从左侧搜索,索引就可以按字符子集进行搜索。例如,"Inter%" 可以查找,"%net" 不会。

但是,第一个字符不一定是文章将在其下排序的字符。“互联网”应该放在“I”下,而不是“T”下。您可能需要两个字段,DisplayTitle并且SortTitle; 后者的单字符索引可能是值得的,但很可能全长索引就可以了。

索引通常是 B 树,无论每页有 10 个还是 100 个条目,搜索都会以同样快的速度跳转到正确的位置。扫描是另一回事,但我会从最简单的解决方案开始,只有在实践中证明性能不足时才添加额外的索引。