Документация MySQL

09.07.2007

помещено в раздел, посвященный
, потому что они главным образом используются в запросах
, но
для выражений
используются те же
способы оптимизации.
Отметим также, что данный раздел неполон. В MySQL реализовано много
возможностей оптимизации, и у нас не было времени, чтобы задокументировать
их все.
Ниже перечислены некоторые из оптимизации, выполняемых MySQL:
Константные выражения, используемые индексами, оцениваются только один

раз.
, которая вызывается для

одной таблицы и не содержит предложения
, берется непосредственно
из табличной информации. Это делается также для любого выражения
, в котором используется только одна таблица.
Недопустимые константные выражения выявляются на ранних этапах. MySQL

быстро обнаруживает, что некоторые операторы
неосуществимы и не
возвращают строк.
, если не используется

предложение
COUNT(), MIN()...
).
, чтобы ускорить оценку
для каждого
подчиненного связывания а также чтобы пропустить записи как можно
быстрее.
Все константные таблицы считываются в первую очередь, перед любыми

другими таблицами в запросе. К константным таблицам относятся
следующие:
Пустая таблица или таблица с 1 строкой.
Таблица, которая используется с выражением
,

или
, где все части индекса используются с константными
выражениями и части индекса определены как
.
mysql> SELECT * FROM t WHERE primary_key=1;
mysql> SELECT * FROM t1,t2
-> WHERE t1.primary_key=1 AND t2.primary_key=t1.id;
Лучшая комбинацию связывания для связывания таблиц находится путем

испытания всех возможных вариантов. Если все столбцы в предложениях
принадлежат одной таблице, эта таблица
рассматривается первой при связывании.
,

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

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

охватывающий менее 30% строк. Если такой индекс найти нельзя,
используется быстрое сканирование таблицы.
В некоторых случаях MySQL может читать данные из индекса даже без

обращения к файлу данных. Если все столбцы, используемые в индексе,
числовые, то для выполнения запроса будет использоваться только
индексное дерево.
Перед выводом каждой записи пропускаются те, которые не соответствуют

выражению
.
mysql> SELECT COUNT(*) FROM tbl_name;
mysql> SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;
mysql> SELECT MAX(key_part2) FROM tbl_name
-> WHERE key_part_1=constant;
mysql> SELECT ... FROM tbl_name
-> ORDER BY key_part1,key_part2,... LIMIT 10;
mysql> SELECT ... FROM tbl_name
-> ORDER BY key_part1 DESC,key_part2 DESC,... LIMIT 10;
Для выполнения следующих запросов используется только индексное дерево
(предполагается, что индексированные столбцы числовые):
mysql> SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;
mysql> SELECT COUNT(*) FROM tbl_name
-> WHERE key_part1=val1 AND key_part2=val2;
mysql> SELECT key_part2 FROM tbl_name GROUP BY key_part1;
Следующие запросы используют индексацию, чтобы получить отсортированные
строки без дополнительного прохода для сортировки:
mysql> SELECT ... FROM tbl_name
-> ORDER BY key_part1,key_part2,... ;
mysql> SELECT ... FROM tbl_name
-> ORDER BY key_part1 DESC,key_part2 DESC,... ;

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Рубрики: Без рубрики |

Оставить комментарий

Заметьте: Включена проверка комментариев. Нет смысла повторно отправлять комментарий.