
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() ![]() TERRAFORMING ENGINEER ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: ★ЛжеЭксперт★ ![]() Сообщений: 3900 Пользователь №: 21196 На форуме: Карма: 88 ![]() |
Привет.
Решил вот проверить, есть ли разница между размерами таблиц с одинаковыми данными, но по разному раположенными столбцами в составном индексе, а заодно и скорость выборки. По теории левее желательно ставить более селективный столбец, но, как-то разницы вот не заметил. Результат: скорость одинаковая, размер таблиц одинаковый. Просто решил выложить, если кому любопытно. Итак, 2 таблицы INNODB, по 100 000 строк в каждой. Test1 и Test2 ![]() У первой составной индекс:a/b/c/d У второй составной индекс:d/a/b/c Запросы вида: SELECT `name` и SELECT `name` Показали одинаковую скорость. На диске таблицы и их индексы занимают одинаковое место. Может есть какие-то комментарии? :) -------------------- Не тот велик, кто не падал, а тот кто падал и поднимался.
|
![]() |
۩
Дата
|
![]() ![]() TERRAFORMING ENGINEER ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: ★ЛжеЭксперт★ ![]() Сообщений: 3900 Пользователь №: 21196 На форуме: Карма: 88 ![]() |
MiksIr
Я подумал о размерах индексов прежде всего, подумал, что возможно в первом варианте как-бы на строение деревьев возможно будет больше затрат. ![]() -------------------- Не тот велик, кто не падал, а тот кто падал и поднимался.
|
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 4434 Пользователь №: 17 На форуме: Карма: 16 ![]() |
А выборка только по `a` как?
-------------------- |
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2804 Пользователь №: 24406 На форуме: Карма: 181 ![]() |
ABC Забудь про ENUM как за страшный сон. Бесполезный тип данных.
Лучше использовать вначале столбцы с большей селективностью, чтоб не перегребать лишние данные в памяти(хоть это выполняется и очень быстро). -------------------- Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
|
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 4434 Пользователь №: 17 На форуме: Карма: 16 ![]() |
Да причём тут селективность-шмелективность?
EXPLAIN SELECT WHERE `a`=? -------------------- |
![]() |
|||
![]() ![]() Сидел он, дум великих полон - и вдаль глядел ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 15860 Пользователь №: 4190 На форуме: Карма: 490 ![]() |
Я подобную хрень проверял в Постгре, с таблицами большого размера. И однозначно могу сказать, что от порядка колонок в индексе скорость зависит. Причем заметно. Только надо "правильно проверять" ![]() Уточняю насчет "подходящести". Если у тебя разных вариаций в каждой колонке примерно одинаковое количество, то порядок будет не важен. Но если у тебя в колонке "a" всего 100 разных значений, в колонке "b" 1000, а в колонке "c" - 10000, причем всего в таблице 2-3 млн записей, то тут уже порядок будет важен. PS. По-моему, я тут даже тему делал об этом... Только было сие несколько лет тому назад. Сейчас искать лень, если честно ![]() Это сообщение отредактировал sergeiss - 28.01.2014 - 20:56 -------------------- * Хэлп по PHP
* Описалово по JavaScript * Хэлп и СУБД для PostgreSQL * Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. * "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С) ![]() |
||
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6460 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
что-то я не понимаю юмора, если составной индекс на три колонны, то всего должно быть 4 индекса, три на каждую и один общий, я еще могу понять, что от порядка столбцов может зависить скорость индексации, но что бы зависила выборка, это как-то протеворечит самому понятию индекса
-------------------- |
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2804 Пользователь №: 24406 На форуме: Карма: 181 ![]() |
Valick Ты меня пугаешь
![]() -------------------- Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
|
![]() |
|||
![]() ![]() Сидел он, дум великих полон - и вдаль глядел ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 15860 Пользователь №: 4190 На форуме: Карма: 490 ![]() |
И меня ты тоже пугаешь такими высказываниями ![]() Это говорит человек, которого я считаю спецом в веб-программировании вообще и в работе с БД в частности - или это под твоим аккаунтом кто-то другой пишет? -------------------- * Хэлп по PHP
* Описалово по JavaScript * Хэлп и СУБД для PostgreSQL * Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. * "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С) ![]() |
||
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6460 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
sergeiss, может я не внимательно тему прочитал
-------------------- |
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2804 Пользователь №: 24406 На форуме: Карма: 181 ![]() |
Есть такое понятие как "мощность"(Сardinality) индекса, который зависит от селективности.
Так вот, в том же Mysql, оптимизатор проверяет эффективность индексов и если в случае когда есть композитный индекс field1 + field2 и он используется, то при field2 + field1 Mysql может вообще отказаться использовать индекс предпочтя FULL TABLE SCAN. -------------------- Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
|
![]() |
۩
Дата
|
||||||||||||||
![]() ![]() TERRAFORMING ENGINEER ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: ★ЛжеЭксперт★ ![]() Сообщений: 3900 Пользователь №: 21196 На форуме: Карма: 88 ![]() |
Нууу...Если звезды зажигаются, значит это кому-нибудь нужно? Пруф о бесполезности работы проектировщиков MySQL можно?
Так и делаю:
Посмотрите внимательно на оба запроса.
Составной индекс на 4 колонны, по всем идет выборка.
Вот ради этого я пост и создал. Хотя мой тест с таблицами по 100 тыс. этого не подтвердил. Вот, что я предположил, почему скорость должна быть разной при больших объемах. Если первый столбец поле d - varchar - с очень высокой селективностью. В моем случае 3 строчки на 100 тысяч. Тогда для второго столбца всего 3 строки на обработку, а для последующих вообще единственная. Т.е. материал с которым придется работать MySQL совсем мал, всего 3 строчки изначально. Если первый столбец поле a - ENUM - с очень низкой селективностью. В моем случае ~50000 строк на 100 тысяч. Тогда вплоть до самого последнего столбца будет "ворочаться" тысячи строк. Больший объем будет занят в оперативной памяти. Прочитав эту замечательную статью: http://habrahabr.ru/post/141767/
подумал о степени заполнения страниц, ну и решил просто набросать тест, чтоб посмотреть что будет. Спасибо всем, кто прокомментировал. -------------------- Не тот велик, кто не падал, а тот кто падал и поднимался.
|
||||||||||||||
![]() |
|||
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 12174 Пользователь №: 23195 На форуме: Карма: 441 Трезвый : 15 лет, 6 месяцев, 27 дней ![]() |
это еще почему? ![]() -------------------- |
||
![]() |
![]() ![]() ![]() |