Spec-Zone .ru
спецификации, руководства, описания, API

8.3.8. Сравнение B-дерева и Хеша Индексирует

Понимание B-дерева и структур данных хеша может помочь предсказать, как различные запросы выполняют на различных механизмах хранения, которые используют эти структуры данных в их, индексирует, особенно для MEMORY механизм хранения, который позволяет Вам выбирать B-дерево или хеш, индексирует.

B-дерево Индексирует Характеристики

B-дерево индексирует, может использоваться для сравнений столбца в выражениях, которые используют =, >, >=, <, <=, или BETWEEN операторы. Индексирование также может использоваться для LIKE сравнения, если параметр LIKE постоянная строка, которая не запускается с подстановочного символа. Например, следующий SELECT использование операторов индексирует:

SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

В первом операторе, только строки с 'Patrick' <= key_col < 'Patricl' рассматриваются. Во втором операторе, только строки с 'Pat' <= key_col < 'Pau' рассматриваются.

Следующий SELECT операторы не используют, индексирует:

SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';SELECT * FROM tbl_name WHERE key_col LIKE other_col;

В первом операторе, LIKE значение начинается с подстановочного символа. Во втором операторе, LIKE значение не является константой.

Если Вы используете ... LIKE '%string%' и string более длинно чем три символа, MySQL использует Турбо алгоритм Бойер-Мура, чтобы инициализировать образец для строки и затем использует этот образец, чтобы выполнить поиск более быстро.

Использование поиска col_name IS NULL использует индексирует если col_name индексируется.

Любой индексирует, который не охватывает все AND уровни в WHERE пункт не используется, чтобы оптимизировать запрос. Другими словами, чтобы быть в состоянии использовать индексирование, префикс индексирования должен использоваться в каждом AND группа.

Следующий WHERE использование пунктов индексирует:

... WHERE index_part1=1 AND index_part2=2 AND other_column=3    /* index = 1 OR index = 2 */... WHERE index=1 OR A=10 AND index=2    /* optimized like "index_part1='hello'" */... WHERE index_part1='hello' AND index_part3=5    /* Can use index on index1 but not on index2 or index3 */... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;

Они WHERE пункты не используют, индексирует:

    /* index_part1 is not used */... WHERE index_part2=1 AND index_part3=2    /*  Index is not used in both parts of the WHERE clause  */... WHERE index=1 OR A=10    /* No index spans all rows  */... WHERE index_part1=1 OR index_part2=10

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

Хеш Индексирует Характеристики

Хеш индексирует, имеют несколько различные характеристики от только обсужденных: