[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как оптимизировать связку из трех таблиц
Страницы: 1, 2
S.Chushkin
Цитата (T1grOK @ 14.12.2013 - 16:11)
Если грамотно индексы проставить, то итоговая(соединенная) таблица получится не такая уж и большая.

Странное мнение ... индексов будет 2, в любом случае.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Valick
Цитата
Если грамотно индексы проставить, то итоговая(соединенная) таблица получится не такая уж и большая.

Величина результирующей таблицы не зависит от индексов, индексы влияют исключительно на скорость выборки.


_____________
Стимулятор ~yoomoney - 41001303250491
SoMeOnE
S.Chushkin
Да я из за другого запутался немного. Я же не весь код приводил)
S.Chushkin
Цитата (Valick @ 14.12.2013 - 17:16)
Величина результирующей таблицы не зависит от индексов, индексы влияют исключительно на скорость выборки.

Тоже не совсем верное утверждение, если Вы о:
Размер БД (что подразумевалось под "размером таблицы", я так думаю) зависит в т.ч. и от места, занимаемое индексами.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
T1grOK
Цитата (Valick @ 14.12.2013 - 13:16)
Величина результирующей таблицы не зависит от индексов, индексы влияют исключительно на скорость выборки.

Немного не так выразился, результат конечно будет одинаков. Я говорил о размере JOIN SIZE таблицы, которую придется создать Mysql, чтобы потом из этого набора выбрать только нужные данные.

Цитата (S.Chushkin @ 14.12.2013 - 12:46)
Странное мнение ... индексов будет 2, в любом случае.

Я не говорю конкретно об этом запросе. А о JOIN в целом и о больших таблицах. И если добавляются различные условия или поля используемые в ON не имеют индекса, то JOIN SIZE может оказаться огромным.

Буквально недавно оптимизировал проект, там JOIN SIZE был размером в 5 млн. шаманство с индексами привело к уменьшению JOIN SIZE до 17к и то пришлось поизвращаться, так чтобы Mysql выбрал именно тот индекс, который подразумевается. Оптимизатор то сабака порой делает по своему smile.gif

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
S.Chushkin
Цитата (T1grOK @ 14.12.2013 - 17:50)
Я говорил о размере JOIN SIZE таблицы, которую придется создать Mysql, чтобы потом из этого набора выбрать только нужные данные.

Хм...
Знаю о числе прочитанных строк из таблицы, количестве прочитанных данных, числе запросов к индексу, числе логических операций и ещё с десяток подобных параметров. О "JOIN SIZE" слышу впервые.
Я что-то пропустил?

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
T1grOK
JOIN SIZE произведение извлеченных строк с каждой таблицы. Грубо говоря.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
Valick
S.Chushkin, читайте внимательнее, я говорил о размере выборки, т. е. о количестве строк. Размер самой БД естественно основа + индекс



_____________
Стимулятор ~yoomoney - 41001303250491
S.Chushkin
Цитата (T1grOK @ 14.12.2013 - 18:55)
JOIN SIZE произведение извлеченных строк с каждой таблицы. Грубо говоря.

Понятно, - сами придумали. smile.gif

На самом деле нет такого понятия размер join, есть выборка полным сканированием таблицы и выборка по индексу. Естественно, по индексу будет много много быстрее, на то они и придуманы.
п.с.
Кстати, в доке есть наглядное описание как работает left join.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
Цитата (Valick @ 14.12.2013 - 19:52)
S.Chushkin, читайте внимательнее, я говорил о размере выборки, т. е. о количестве строк. Размер самой БД естественно основа + индекс

Понял. Извиняюсь, не дошло сразу. sad.gif

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
T1grOK
Цитата (S.Chushkin @ 14.12.2013 - 15:59)
Понятно, - сами придумали.

Да, сижу и придумываю. "Баки" забиваю.
В некоторых профилирующих приложениях такое понятие имеется для числовой оценки "тяжести" запроса. При том если знаете как обрабатываются данные при выборке из нескольких таблиц, то понятие вполне справедливо. В самом Mysql есть параметр max_join_size, назначение несколько иное, но тем не менее косвенно относится к JOIN SIZE.
user posted image

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
T1grOK
Цитата (S.Chushkin @ 14.12.2013 - 15:59)
есть выборка полным сканированием таблицы и выборка по индексу.

В том то и дело, что без индекса придется выгребти большую часть базы, а при индексе будет произведено только точечное чтение. JOIN сам по себе геометрическая прогрессия.

_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
S.Chushkin
Цитата (T1grOK @ 14.12.2013 - 20:33)
В некоторых профилирующих приложениях такое понятие имеется для числовой оценки "тяжести" запроса.

Понял. (не пользую)

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
Цитата (T1grOK @ 14.12.2013 - 20:57)
В том то и дело, что без индекса придется выгребти большую часть базы, а при индексе будет произведено только точечное чтение. JOIN сам по себе геометрическая прогрессия.

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

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.