SlideShare a Scribd company logo
Основы
индексирования и
расширенные
возможности
EXPLAIN MySQLв
Василий
Лукьянчико
в
План
• Архитектура
• Основы индексирования
• EXPLAIN (примеры)
Архитектура MySQL
Индексы
CREATE TABLE test (
id int not null auto_increment PRIMARY KEY,
…
INDEX(id),
UNIQUE(id));
index(A) ненужен при index(A,B) (если обаb-tree)
whereB=5 <=> whereA in (0,1) and B=5
(select .. whereA=0 and B=5 order by C limit 10)
union all
(select .. whereA=1 and B=5 order by C limit 10)
order by C limit 10;
Составные индексы
index(A,B,C) только последовательно и без пропусков
WHEREA=10AND B>405;
WHERE B=10AND A=9AND C<504;
WHEREA=10AND B=7 ORDER BY C;
WHERE B=3;
WHEREA=10AND B>4AND C>17;
WHEREA=10 ORDER BY C;
WHEREA=10 ORDER BY B, C;
WHEREA=10 ORDER BY B, C DESC;
Индексы не работают
• часть выражения: id + 1 = 3
year(key)=2015 <=> key between ‘2015-01-01’ and ‘2015-12-31’
• преобразованиетипов: key_str = 15
• несоответствиекодировок: key.utf = key.latin
• неиспользуется левая часть составного индекса:
index(a,b); whereb = x
• поиск по суффиксу:
key like‘%x’
• сравнениес исходной таблицей: t.key = t.col
index condition pushdown
WHEREA=10AND B like‘%x’;
WHEREA=10AND C=7;
Extended keys
вторичныеinnodb индексы имеют «хвост» из первичного
primary (A, B)
index(C) => (C, A, B)
index(B, C) => (B, C, A), не(B, C, A, B)
только для фильтрации строк
MariaDB 5.5 / MySQL 5.6
Ограничения оптимизатора
• мало статистики
• неучитывает особенности хранилищ, нагрузку, буферы
соединений и кэши
• метрика
• сложность выбора
• использует правила
whereabetween 1 and 4
wherea>0 and a< 5
Оптимизатор
• Проверканатривиальность
• Преобразованиезапроса
• Реестр индексов
• Выбирает самый дешевый план
Учитывает:
• SHOW CREATE TABLE и SHOW TABLE STATUS
• SHOW INDEX
• статистическая информация об индексах
• независимая статистика
Влияние на оптимизатор
• переписать запрос
• индексы
• use/force/ignoreindex
• straight_join
• @@optimizer_switch
• optimizer_prune_level и optimizer_search_depth
SQL_CALC_FOUND_ROWS
SELECT SQL_CALC_FOUND_ROWS... LIMIT ...
SELECT ... LIMIT ...
SELECT COUNT(*) ...
2 задачи – 1 метод
непозволяет использовать ряд оптимизаций
Недостатки explain
• неучитывает хранимыефункции
• может обмануть
• мало информации: план совпадает – производительность нет;
одинаковыетермины для различных ситуаций
• выполнениеfrom подзапросов
• может выполняться дольше, чем сам запрос
• оптимален ли план?
• соответствует ли тому, что было насамом деле?
Виды explain
EXPLAIN PARTITIONS..
EXPLAIN EXTENDED ..
SHOW WARNINGS;
sql запрос восстановленный из планавыполнения
<auto_key>
<cache>(expr)
<primary_index_lookup>(query fragment)
outer_tablessemi join (inner_tables)
/* select#N */ select_stmt
EXPLAIN SELECT city.nameFROM country JOIN city ON countrycode= code
WHERE continent='Europe' ORDER BY city.population DESC LIMIT 5G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: city
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4079
Extra: Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: country
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 3
ref: test.city.CountryCode
rows: 1
Extra: Using where
Результат EXPLAIN
id - идентификатор результата
select_ type - тип запроса:
• SIMPLE - простой запрос (без UNION и без подзапросов);
• PRIMARY - внешний запрос по отношению к подзапросу или первый запрос в
объединении;
• UNION - второй или последующиезапросы в объединении (UNION);
• DEPENDENT UNION - второй или последующиезапросы в объединении (UNION),
зависящиеот внешнего запроса;
• UNION RESULT - отдельная строчкадля результатаобъединения;
• DERIVED - подзапрос, размещенный в области FROM.
• SUBQUERY, DEPENDENT SUBQUERY - подзапрос или зависимый от внешнего
запросаподзапрос;
• MATERIALIZED – материализация подзапроса
Результат EXPLAIN
table - имя таблицы
Результат EXPLAIN
Результат EXPLAIN
Пример
SELECT actor_id,
(SELECT 1 FROM sakila.film_actor
WHERE film_actor.actor_id = der_1.actor_id LIMIT 1)
FROM (
SELECT actor_id FROM sakila.actor LIMIT 5
) ASt1
UNION ALL
SELECT film_id,
(SELECT @var1 FROM sakila.rental LIMIT 1)
FROM (
SELECT film_id,
(SELECT 1 FROM sakila.storeLIMIT 1)
FROM sakila.film LIMIT 5
) ASt2;
Результат EXPLAIN
type- тип доступак таблице:
NULL - результат запросаможет быть получен без обращения к
таблицеили индексу.
system - специальный способ обращения к таблицам, содержащим
только одну строку;
const - запрос выполняется по уникальному ключу и приводит к
формированию неболее, чем одной строки;
eq_ref - запрос выполняется по уникальному ключу и приводит к
формированию неболее, чем одной строки для каждого
значения данных из внешнего запроса;
ref - запрос выполняется с использованием неуникального индекса
или с использованием левой части уникального индекса(которая
самапо себеявляется неуникальным индексом);
type продолжение
ref_or_null - аналогично типу ref, но в случае, если ключ допускает
значения NULL;
index_merge– использует несколько индексов.
unique_subquery - подзапрос в области IN заменяется на
дополнительноеусловиев части WHERE, осуществляющее
функцию просмотраиндекса; в этом случаенет накладных
расходов навыполнениеподзапроса. Работает только для
подзапросов видаvalueIN (SELECT primary_key FROM
single_tableWHERE some_expr);
index_subquery - аналогично unique_subquery, но без требования
уникальности индекса. Работает для подзапросов видаvalueIN
(SELECT key_column FROM single_tableWHERE some_expr);
type продолжение
range- индекс используется для операций неравенства(>, <, >=, <=,
LIKE, BETWEEN);
index - относится к двум типам доступа: (а) всеколонки,
используемыев запросе, присутствуют в индексе, поэтому
запрос может быть выполнен без обращения к данным таблицы,
(б) обход таблицы производится в порядке, заданном индексом;
ALL - производится полный скан таблицы (FTS- full tablescan).
Результат EXPLAIN
key - индекс, который решено использовать (USE INDEX, IGNORE
INDEX);
key_len - длинаиндексаили используемой части индексав байтах;
ref - если тип доступак таблицеимеет одно из следующих значений
(eq_ref, ref, ref_or_null, index_subquery, unique_subquery), то поле
содержит:
• именаколонок другой таблицы, используемыепри обращении
к индексу
• const, если обращениек индексу производится по заданному
константному значению
• func, если значение, по которому производится обращениек
индексу, является результатом функции.
В остальных случаях полепринимает значениеnull;
Результат EXPLAIN
rows- число строк, которыеMySQL ожидает перебрать для
выполнения данного запроса(ANALYZE TABLE;)
Extra- дополнительная информация:
Using filesort - файловая сортировкарезультата(в памяти или на
диске, в зависимости от объемаданных);
Using temporary - созданиевременной таблицы (в памяти или на
диске, в зависимости от объемаданных и значения минимальной
из переменных max_heap_table_sizeи tmp_table_size);
Using index - всеколонки, используемыев запросе, присутствуют
в индексе, поэтому запрос может быть выполнен без обращения
к данным таблицы (частный случай (а) типадоступаindex);
Профилирование
select c1 from t1 where(c1,c11) in
(select c2,c22 fromt2 wherec2>1 and c22<20)
         id: 2
select_type: DEPENDENT SUBQUERY
    table: t2
     type: index_subquery
SET profiling=1;
SELECT ...
SELECT STATE, COUNT(*), FORMAT(SUM(DURATION), 6) AS
DURATION
    FROM INFORMATION_SCHEMA.PROFILING
    WHERE QUERY_ID = 1 GROUPBY STATE;
Профилирование
Сортировка
может использовать индекс:
• левый префикс, если нет where, join
• если join, то только столбцы из 1ой таблицы
• сортировкав одном направлении
ORDER BY rand()
GROUPBY x ORDER BY null
ORDER BY id LIMIT 10000, 10
пример продолжение
ORDER BY + LIMIT
ORDER BY + LIMIT
Сортировка
Неравенства
select .. whereA<10 and B<20 and C=5;
секционирование
(C,A) или (C,B)
исключить одно из условий
Улучшения EXPLAIN
EXPLAIN для INSERT/UPDATE/DELETE
SHOW EXPLAIN
JSON формат для EXPLAIN
ANALYZE statement..
SHOW EXPLAIN
show processlist;
SHOW EXPLAIN FOR <thread_id>;
show warnings; -- показывает запрос
возможность сохранить в лог медленных запросов
[mysqld]
log-slow-verbosity=query_plan,explain
EXPLAIN format=json
Спасибо за внимание
/вопросы ответы
SQLinfo.ru/forum/

More Related Content

What's hot

Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
Nikolay Sivko
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Ontico
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Mail.ru Group
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Ontico
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Ontico
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Ontico
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
Ontico
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Ontico
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
Ontico
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
Vadim Madison
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Ontico
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
Technopark
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
Ontico
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Ontico
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
Alex Chistyakov
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 

What's hot (20)

Поиск наизнанку
Поиск наизнанкуПоиск наизнанку
Поиск наизнанку
 
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
Linux API с точки зрения разработчика веб-сервера / Валентин Бартенев (NGINX,...
 
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru GroupDennis Anikin - Tarantool Case Studies in Mail.Ru Group
Dennis Anikin - Tarantool Case Studies in Mail.Ru Group
 
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
Open Source SQL-базы данных вступили в эру миллионов запросов в секунду / Фед...
 
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
 
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
Практика совместного использования Lua и C в opensource спам-фильтре Rspamd /...
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?Чему мы научились разрабатывая микросервисы?
Чему мы научились разрабатывая микросервисы?
 
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Обзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий НасретдиновОбзор перспективных баз данных для highload / Юрий Насретдинов
Обзор перспективных баз данных для highload / Юрий Насретдинов
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 

Viewers also liked

Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Ontico
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Ontico
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Ontico
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Ontico
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Ontico
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Ontico
 
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Ontico
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Ontico
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Ontico
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
Ontico
 

Viewers also liked (12)

Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
 
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
 
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
 
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
 
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
 
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
 
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
 
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
 
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
Как понять, что происходит на сервере? / Александр Крижановский (NatSys Lab.,...
 
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)Как устроен поиск / Андрей Аксенов (Sphinx)
Как устроен поиск / Андрей Аксенов (Sphinx)
 

Similar to Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лукьянчиков (ООО «Станигост»)

СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
Technopark
 
Troubleshooting my sql_performance_addons
Troubleshooting my sql_performance_addonsTroubleshooting my sql_performance_addons
Troubleshooting my sql_performance_addons
Sveta Smirnova
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовAlex.Kolonitsky
 
СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7Technopark
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8Technopark
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuningcollabock
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLНародные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
Nikolay Pisarev
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
Technopark
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Tanya Denisyuk
 
24 25 запросы
24 25 запросы24 25 запросы
24 25 запросы
Evgeniy Golendyhin
 
Excel in Javascript
Excel in JavascriptExcel in Javascript
Excel in Javascript
Viktor Turskyi
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
Andrey Gershun
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
CodeFest
 
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Ontico
 
Разработка баз данных - введение
Разработка баз данных - введениеРазработка баз данных - введение
Разработка баз данных - введениеАлександр Шамрай
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Sveta Smirnova
 
34 - Базы данных. Рекомендации по составлению запросов
34 - Базы данных. Рекомендации по составлению запросов34 - Базы данных. Рекомендации по составлению запросов
34 - Базы данных. Рекомендации по составлению запросов
Roman Brovko
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
Alex Tumanoff
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Badoo Development
 

Similar to Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лукьянчиков (ООО «Станигост») (20)

СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
Troubleshooting my sql_performance_addons
Troubleshooting my sql_performance_addonsTroubleshooting my sql_performance_addons
Troubleshooting my sql_performance_addons
 
Оптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросовОптимизации скорости выполнения запросов
Оптимизации скорости выполнения запросов
 
СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7СУБД осень 2012 лекция 7
СУБД осень 2012 лекция 7
 
СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8СУБД осень 2012 лекция 8
СУБД осень 2012 лекция 8
 
Query perfomance tuning
Query perfomance tuningQuery perfomance tuning
Query perfomance tuning
 
Народные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQLНародные средства оптимизации PostgreSQL
Народные средства оптимизации PostgreSQL
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьСергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Сергей Аверин, То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
24 25 запросы
24 25 запросы24 25 запросы
24 25 запросы
 
Excel in Javascript
Excel in JavascriptExcel in Javascript
Excel in Javascript
 
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
AlaSQL - SQL библиотека на JavaScript (выступление на PiterJS)
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
 
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
Олег Бартунов, Федор Сигаев, Александр Коротков (PostgreSQL)
 
Разработка баз данных - введение
Разработка баз данных - введениеРазработка баз данных - введение
Разработка баз данных - введение
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
 
34 - Базы данных. Рекомендации по составлению запросов
34 - Базы данных. Рекомендации по составлению запросов34 - Базы данных. Рекомендации по составлению запросов
34 - Базы данных. Рекомендации по составлению запросов
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
 
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
Доклад Сергея Аверина на CodeFest-2013. "MySQL+HandlerSocket=NoSQL".
 
My sql 0
My sql 0My sql 0
My sql 0
 

More from Ontico

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Ontico
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Ontico
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Ontico
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Ontico
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Ontico
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Ontico
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Ontico
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
Ontico
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Ontico
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Ontico
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Ontico
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Ontico
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Ontico
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Ontico
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Ontico
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Ontico
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Ontico
 

More from Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Основы индексирования и расширенные возможности EXPLAIN в MySQL / Василий Лукьянчиков (ООО «Станигост»)

  • 2. План • Архитектура • Основы индексирования • EXPLAIN (примеры)
  • 4. Индексы CREATE TABLE test ( id int not null auto_increment PRIMARY KEY, … INDEX(id), UNIQUE(id)); index(A) ненужен при index(A,B) (если обаb-tree) whereB=5 <=> whereA in (0,1) and B=5 (select .. whereA=0 and B=5 order by C limit 10) union all (select .. whereA=1 and B=5 order by C limit 10) order by C limit 10;
  • 5. Составные индексы index(A,B,C) только последовательно и без пропусков WHEREA=10AND B>405; WHERE B=10AND A=9AND C<504; WHEREA=10AND B=7 ORDER BY C; WHERE B=3; WHEREA=10AND B>4AND C>17; WHEREA=10 ORDER BY C; WHEREA=10 ORDER BY B, C; WHEREA=10 ORDER BY B, C DESC;
  • 6. Индексы не работают • часть выражения: id + 1 = 3 year(key)=2015 <=> key between ‘2015-01-01’ and ‘2015-12-31’ • преобразованиетипов: key_str = 15 • несоответствиекодировок: key.utf = key.latin • неиспользуется левая часть составного индекса: index(a,b); whereb = x • поиск по суффиксу: key like‘%x’ • сравнениес исходной таблицей: t.key = t.col
  • 7. index condition pushdown WHEREA=10AND B like‘%x’; WHEREA=10AND C=7;
  • 8. Extended keys вторичныеinnodb индексы имеют «хвост» из первичного primary (A, B) index(C) => (C, A, B) index(B, C) => (B, C, A), не(B, C, A, B) только для фильтрации строк MariaDB 5.5 / MySQL 5.6
  • 9. Ограничения оптимизатора • мало статистики • неучитывает особенности хранилищ, нагрузку, буферы соединений и кэши • метрика • сложность выбора • использует правила whereabetween 1 and 4 wherea>0 and a< 5
  • 10. Оптимизатор • Проверканатривиальность • Преобразованиезапроса • Реестр индексов • Выбирает самый дешевый план Учитывает: • SHOW CREATE TABLE и SHOW TABLE STATUS • SHOW INDEX • статистическая информация об индексах • независимая статистика
  • 11.
  • 12. Влияние на оптимизатор • переписать запрос • индексы • use/force/ignoreindex • straight_join • @@optimizer_switch • optimizer_prune_level и optimizer_search_depth
  • 13. SQL_CALC_FOUND_ROWS SELECT SQL_CALC_FOUND_ROWS... LIMIT ... SELECT ... LIMIT ... SELECT COUNT(*) ... 2 задачи – 1 метод непозволяет использовать ряд оптимизаций
  • 14. Недостатки explain • неучитывает хранимыефункции • может обмануть • мало информации: план совпадает – производительность нет; одинаковыетермины для различных ситуаций • выполнениеfrom подзапросов • может выполняться дольше, чем сам запрос • оптимален ли план? • соответствует ли тому, что было насамом деле?
  • 15. Виды explain EXPLAIN PARTITIONS.. EXPLAIN EXTENDED .. SHOW WARNINGS; sql запрос восстановленный из планавыполнения <auto_key> <cache>(expr) <primary_index_lookup>(query fragment) outer_tablessemi join (inner_tables) /* select#N */ select_stmt
  • 16. EXPLAIN SELECT city.nameFROM country JOIN city ON countrycode= code WHERE continent='Europe' ORDER BY city.population DESC LIMIT 5G *************************** 1. row *************************** id: 1 select_type: SIMPLE table: city type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 4079 Extra: Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: country type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 3 ref: test.city.CountryCode rows: 1 Extra: Using where
  • 17. Результат EXPLAIN id - идентификатор результата select_ type - тип запроса: • SIMPLE - простой запрос (без UNION и без подзапросов); • PRIMARY - внешний запрос по отношению к подзапросу или первый запрос в объединении; • UNION - второй или последующиезапросы в объединении (UNION); • DEPENDENT UNION - второй или последующиезапросы в объединении (UNION), зависящиеот внешнего запроса; • UNION RESULT - отдельная строчкадля результатаобъединения; • DERIVED - подзапрос, размещенный в области FROM. • SUBQUERY, DEPENDENT SUBQUERY - подзапрос или зависимый от внешнего запросаподзапрос; • MATERIALIZED – материализация подзапроса
  • 18. Результат EXPLAIN table - имя таблицы
  • 21. Пример SELECT actor_id, (SELECT 1 FROM sakila.film_actor WHERE film_actor.actor_id = der_1.actor_id LIMIT 1) FROM ( SELECT actor_id FROM sakila.actor LIMIT 5 ) ASt1 UNION ALL SELECT film_id, (SELECT @var1 FROM sakila.rental LIMIT 1) FROM ( SELECT film_id, (SELECT 1 FROM sakila.storeLIMIT 1) FROM sakila.film LIMIT 5 ) ASt2;
  • 22.
  • 23. Результат EXPLAIN type- тип доступак таблице: NULL - результат запросаможет быть получен без обращения к таблицеили индексу. system - специальный способ обращения к таблицам, содержащим только одну строку; const - запрос выполняется по уникальному ключу и приводит к формированию неболее, чем одной строки; eq_ref - запрос выполняется по уникальному ключу и приводит к формированию неболее, чем одной строки для каждого значения данных из внешнего запроса; ref - запрос выполняется с использованием неуникального индекса или с использованием левой части уникального индекса(которая самапо себеявляется неуникальным индексом);
  • 24. type продолжение ref_or_null - аналогично типу ref, но в случае, если ключ допускает значения NULL; index_merge– использует несколько индексов. unique_subquery - подзапрос в области IN заменяется на дополнительноеусловиев части WHERE, осуществляющее функцию просмотраиндекса; в этом случаенет накладных расходов навыполнениеподзапроса. Работает только для подзапросов видаvalueIN (SELECT primary_key FROM single_tableWHERE some_expr); index_subquery - аналогично unique_subquery, но без требования уникальности индекса. Работает для подзапросов видаvalueIN (SELECT key_column FROM single_tableWHERE some_expr);
  • 25. type продолжение range- индекс используется для операций неравенства(>, <, >=, <=, LIKE, BETWEEN); index - относится к двум типам доступа: (а) всеколонки, используемыев запросе, присутствуют в индексе, поэтому запрос может быть выполнен без обращения к данным таблицы, (б) обход таблицы производится в порядке, заданном индексом; ALL - производится полный скан таблицы (FTS- full tablescan).
  • 26. Результат EXPLAIN key - индекс, который решено использовать (USE INDEX, IGNORE INDEX); key_len - длинаиндексаили используемой части индексав байтах; ref - если тип доступак таблицеимеет одно из следующих значений (eq_ref, ref, ref_or_null, index_subquery, unique_subquery), то поле содержит: • именаколонок другой таблицы, используемыепри обращении к индексу • const, если обращениек индексу производится по заданному константному значению • func, если значение, по которому производится обращениек индексу, является результатом функции. В остальных случаях полепринимает значениеnull;
  • 27. Результат EXPLAIN rows- число строк, которыеMySQL ожидает перебрать для выполнения данного запроса(ANALYZE TABLE;) Extra- дополнительная информация: Using filesort - файловая сортировкарезультата(в памяти или на диске, в зависимости от объемаданных); Using temporary - созданиевременной таблицы (в памяти или на диске, в зависимости от объемаданных и значения минимальной из переменных max_heap_table_sizeи tmp_table_size); Using index - всеколонки, используемыев запросе, присутствуют в индексе, поэтому запрос может быть выполнен без обращения к данным таблицы (частный случай (а) типадоступаindex);
  • 28. Профилирование select c1 from t1 where(c1,c11) in (select c2,c22 fromt2 wherec2>1 and c22<20)          id: 2 select_type: DEPENDENT SUBQUERY     table: t2      type: index_subquery SET profiling=1; SELECT ... SELECT STATE, COUNT(*), FORMAT(SUM(DURATION), 6) AS DURATION     FROM INFORMATION_SCHEMA.PROFILING     WHERE QUERY_ID = 1 GROUPBY STATE;
  • 30. Сортировка может использовать индекс: • левый префикс, если нет where, join • если join, то только столбцы из 1ой таблицы • сортировкав одном направлении ORDER BY rand() GROUPBY x ORDER BY null ORDER BY id LIMIT 10000, 10
  • 31.
  • 33. ORDER BY + LIMIT
  • 34. ORDER BY + LIMIT
  • 36. Неравенства select .. whereA<10 and B<20 and C=5; секционирование (C,A) или (C,B) исключить одно из условий
  • 37. Улучшения EXPLAIN EXPLAIN для INSERT/UPDATE/DELETE SHOW EXPLAIN JSON формат для EXPLAIN ANALYZE statement..
  • 38. SHOW EXPLAIN show processlist; SHOW EXPLAIN FOR <thread_id>; show warnings; -- показывает запрос возможность сохранить в лог медленных запросов [mysqld] log-slow-verbosity=query_plan,explain