用于网址的MySQL INDEX Varchar Field 500

时间:2015-03-12 08:07:56

标签: php mysql indexing

我正在构建一个多语言Web应用程序。

存储在数据库中的网址如:

id_url          bigint(18)
id_map          int(11)
id_entity       bigint(18)
active          tinyint(1)
lang            varchar(8)
path            varchar(500)
path_ids        varchar(50) 
full_path_ids   varchar(50) 
created_at      datetime

我的问题是关于path索引。我只需要进行搜索LIKE '$str%。我不需要LIKE '%$str'

索引是:idx_url_path BTREE No No path (255) 22 A No

它会自动降级为255

关于如何完成任务的任何想法?

1 个答案:

答案 0 :(得分:0)

来自:http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html

  

默认情况下,单列索引的索引键最多可达767   字节。相同的长度限制适用于任何索引键前缀。看到   第13.1.13节“创建索引语法”。例如,你可能会命中   此限制,列前缀索引超过255个字符   TEXT或VARCHAR列,假设UTF-8字符集和最大值   每个字符3个字节。当innodb_large_prefix   配置选项已启用,此长度限制将提升至3072   字节,用于使用DYNAMIC和COMPRESSED行的InnoDB表   格式。

因此,假设您使用的是InnoDB引擎,除非启用innodb_large_prefix配置选项,并且您的表使用DYNAMICCOMPRESSED,否则您无法索引500个字符行格式:

innodb_large_prefix: http://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_large_prefix

DYNAMIC行格式: http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_dynamic_row_format

COMPRESSED行格式: http://dev.mysql.com/doc/refman/5.5/en/glossary.html#glos_compressed_row_format