2014-01-20 3 views
1

У меня есть таблица, созданная как так:Что означает ограничение по размеру индекса MySQL?

CREATE TABLE `my_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`info` varchar(50) DEFAULT NULL, 
`some_more_info` smallint(5) unsigned NOT NULL 
PRIMARY KEY (`id`), 
KEY `my_index` (`some_more_info`,`info`(24)), 
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 

Моего вопрос о втором ключе, который называется my_index. Что означает предел «(24)»? Фактический размер столбца равен 50, но индекс составляет всего 24 символа.

Означает ли это, что MySQL индексирует только первые 24 символа столбца info?

ответ

2

Короче говоря, да, первые 24 символа принимаются во внимание, чтобы построить индекс BTree. Пределы индексирования назначаются таким типам текста, как varchar и text, поскольку они не влияют на числовую точность.

+0

См. Статью [MySQL docs] (http://dev.mysql.com/doc/refman/4.1/en/create-index.html) и посмотрите комментарии к «Индексы могут быть созданы, которые используют только ведущая часть значений столбцов ... " –

1

Да. все описания о длине индекса можно найти здесь: http://dev.mysql.com/doc/refman/5.0/en/create-index.html

длины префикса приведена в символах для недвоичных строковых типов и в байтах для двоичных строковых типов. То есть, элементы индекса состоят из в первых символов длиной каждого значения столбца для CHAR, VARCHAR , и TEXT столбцы, и первые длина байтов каждого значения столбца для BINARY, VARBINARY и BLOB столбцов.

Также вы создаете запрос с/имели некоторые дополнительные.

Смежные вопросы