#mysql #indexing #mysql-workbench #create-table #b-tree
#mysql #индексирование #mysql-workbench #create-table #b-дерево
Вопрос:
Я новичок в SQL, я хочу создать таблицу, я вижу пример:
DROP TABLE IF EXISTS `aaa`;
CREATE TABLE `aaa` (
`date` datetime DEFAULT NULL,
`id` varchar(200) DEFAULT NULL,
...
`source` varchar(200) DEFAULT NULL,
KEY `idx1` (`source`),
KEY `idx2` (`id`,`date`) USING BTREE,
KEY `idx3` (`date`) USING BTREE
) ENGINE=MyISAM
Я читал в Интернете, USING BTREE
но все еще немного смущен, почему idx1
у него нет и idx2
, idx3
есть USING BTREE
? В чем разница и цель? В чем преимущество его использования? Спасибо.
Ответ №1:
Никакой разницы, кроме синтаксиса.
- По умолчанию
BTree
. - Если вы ничего не скажете или даже если скажете
HASH
, оно будет автоматически преобразовано вBTree
.
По сути, BTree — хороший, универсальный механизм индексирования.
- Поиск определенной строки («точечный запрос») выполняется очень быстро. Например:
WHERE x = 123
- Сканирование «диапазона» или строк очень эффективно. Например:
WHERE x BETWEEN 333 AND 444
(Контраст: очень медленно для ХЭША.)
ПОЛНОТЕКСТОВЫЙ и ПРОСТРАНСТВЕННЫЙ, при желании, требуют явной спецификации.
Вам действительно следует перейти с MyISAM на InnoDB.
Смотрите Википедию: MyISAM использует B-дерево; InnoDB использует B дерево.