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 collate utf8_bin NOT NULL, 主键(`id`), KEY `title` (`title`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
好吧,现在我明白长度 1 不足以按第一个字母进行索引,因为 UTF-8 字母可能由三个字节组成。
只要您从左侧搜索,索引就可以按字符子集进行搜索。例如,"Inter%" 可以查找,"%net" 不会。
但是,第一个字符不一定是文章将在其下排序的字符。“互联网”应该放在“I”下,而不是“T”下。您可能需要两个字段,DisplayTitle
并且SortTitle
; 后者的单字符索引可能是值得的,但很可能全长索引就可以了。
索引通常是 B 树,无论每页有 10 个还是 100 个条目,搜索都会以同样快的速度跳转到正确的位置。扫描是另一回事,但我会从最简单的解决方案开始,只有在实践中证明性能不足时才添加额外的索引。
归档时间: |
|
查看次数: |
416 次 |
最近记录: |