Как индекс работает внутренне в MySQL? - PullRequest
1 голос
/ 19 марта 2011

Я использую индексы с моими таблицами, но, честно говоря, я не знаю, как они работают внутри.

Допустим, у меня есть следующая таблица

id age
1  20
2  35
3  19 
4  18

, если я создаю индекс'age', как mysql организует строки?Это организует, зависит от типа поля?или же...?Как MySQL делает индексы для Unicode ??

Ответы [ 5 ]

3 голосов
/ 19 марта 2011

MyISAM сохраняет строки в порядке вставки, а не по ключам.Индекс является иерархическим, с листьями, указывающими на фактические строки.Эта статья дает хорошее представление.

3 голосов
/ 19 марта 2011

Индексы MySQL обычно упорядочены в байтах. Первая часть индекса - это данные, которые индексируются (часто это полное поле, хотя это может быть частичный индекс первых нескольких символов), а вторая часть - это связанный первичный ключ.

Для обработки юникода, если MySQL знает, он работает так же, как классы компаратора в других языках. Версии MySQL с поддержкой Unicode имеют раздел кода, который знает о правильном порядке для Unicode и может сравнивать два символа Unicode, указывающие, какой из них больше другого.

Ваш результирующий индекс для InnoDB (при условии, что ваш PK равен id) будет:

18->4
19->3
20->1
35->2

Для MyISAM будет использоваться ссылка на фактическое местоположение строки.

Кроме того, хорошая статья, которая может дать некоторое представление: http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

1 голос
/ 19 марта 2011

Вы могли бы взглянуть на мое Учебное пособие по индексированию SQL (охватывает MySQL) .

Я думаю, на многие вопросы уже даны ответы в первой главе Анатомия индекса: чтотакое индекс SQL? .

1 голос
/ 19 марта 2011

InnoDB и MyISAM могут использовать (и это очень популярно среди разработчиков баз данных) деревья B +, которые представляют собой структуру данных, наиболее популярную при использовании индексов для баз данных с привязкой к HD (как и большинство СУБД). Чтобы узнать больше о деревьях B +, я настоятельно рекомендую прочитать о них здесь .

1 голос
/ 19 марта 2011

Я не уверен, что вы подразумеваете под "внутренним", но вот довольно всеобъемлющий фрагмент документации MySQL, который объясняет индексы в движке MyISAM.

Конечно, MySQLс открытым исходным кодом, если вы хотите понять, как работает индексирование, посмотрите на код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...