|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
ScareCrow, Как понял "не совсем". Фасеты (мож ошибаюсь) это последовательный параметризованный поиск. Выбрали срез - показали (заодно сохранили, урезав выборку) и так постепенно добавляем параметры отбора. Это полноценный параметризованный поиск по параметрам - выбрали набор параметров и жмакнули "и-щи!" получили результом только то что надо. Оба подхода имеют место быть и у каждого свои плюсики, как и минусики, кмк. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 12:53 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
даже по вашему описанию разницу не видно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 13:17 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
ScareCrow, Разница в реализации. В фасете делаем несколько стартовых view с начальным параметром и прячем в кеш (типо для ускорения первичной выборки), а во втором случае сразу прописываем сложный запрос с кучей параметров и получаем весь результ на руки единовременно. Фасетный поиск, как вариант, ещё вместо выборок в кеш сохраняют отдельные профили индексов "типа предвыборка".. в любом разе, это несколько последовательных этапов (запросов) по 1шт на новый параметр на базе предыдущей выборки. .. ну это как делал, как понимаю .. оф. терминология (Вики): ".. Фасетный поиск позволяет перемещаться по многомерному информационному пространству через объединение текстового поиска с постепенным сужением выбора в каждом измерении .." Реализуется на веб странице параметрической формой, где каждый выбор, тут же показывает "нашлось ххх товаров" .. т.е. часть поиска проведена по этому параметру и создана "фасета" (врем. тбл).. То что тут - это одновременная (разовая) выборка по всему комплекту сразу... собственно "вся разница". :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 13:28 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
ScareCrow, добрый день, я такое из коробки только про Битрикс слышал, я так понимаю, что реализовать это не так просто, подскажите, что почитать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 13:44 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Arhat109, не совсем понял о какой логической функции в SELECT вы говорите? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
разбирался с вариантом который вы предложили и правда интересно, но время выполнения 0.9268 сек. т.е. похоже, что доп. условия не влияли на скорость фильтрации ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 15:02 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
para_bit, Эта модификация и не должна быть быстрее, разве что очень незначительно, т.к. объем выборки тут не изменен по сравнению в пред. вариантом - группируются теже строки. Тут просто наглядней что суммирование - это вычисление попадания в группы, наличие которых Вы потом требуете в HAVING. Так кмк наглядней что ищется. Меня интересовало сравнение с другими вариантами запросов, что Вы привели раньше, для одних и тех же данных и условий поиска. Особенно с вариантом 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 15:48 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
para_bit ScareCrow, добрый день, я такое из коробки только про Битрикс слышал, я так понимаю, что реализовать это не так просто, подскажите, что почитать? штатно это есть в Эластике и Сфинксе. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 16:29 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Akina НеофитSQL замените все джойны на RIGHT JOIN Этот совет следует логике фасетной фильтрации (я не знал этого термина), которая обсуждалась позже в этой теме. Будучи новичком в SQL, я пока некомфортно отношусь к огромному числу комбинаторных вариантов порожденными inner join восьмой степени. Ошибка в условии WHERE может привести в взрывному (миллионы раз) увеличению числа строк. Right join позволяет мне думать об этой задаче как о последовательной фильтрации таблицы product_attribute, с кардинальностью возможного ответа не превышающего размера product_attribute, и (для меня) более простой отладке в случае ошибки. Я понимаю оптимизатор SQL это умная штука, и может исполнять inner join очень эффективно, несмотря на кажущиеся миллиарды комбинаций в десятой степени. ТС сравнил скорость inner/right join, скорость оказалась одинаковой - это говорит о качестве оптимизатора. Надеюсь, ответил на ваш вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 18:07 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Arhat109, Код: sql 1.
ну это как бы одно "яйцо") ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2020, 19:42 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
НеофитSQL Надеюсь, ответил на ваш вопрос. Но я навылет не понимаю, где хоть какая-то точка соприкосновения между различиями в логике получения результатов (вернее, каким условиям отвечают записи, различающие наборы для внутреннего и правого связываний) и этим обоснованием. "Скажите, а вы не пробовали мочу молодого поросёнка?" (с) Что же до тутошнего, частного, случая: Код: sql 1. 2. 3. 4.
Продолжать? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 21:14 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Akina, лол, я как раз вернулся дополнить мое сообщение. меа кулпа. Я позже понял что мое предложение с левым джойн было совершенно бессмысленным, т.к. я неверно о них думал, после нескольких недель левых джойнов по уникальным ключам (там они действительно не увеличивают кардинальность). Досадная ошибка, которую я бы может и не сделал бы днем или месяц назад :) Вот что я надеялся сделать. Привожу несколько строчек от ТС для удобства обсуждения: Код: sql 1. 2. 3.
Начать с таблицы product_to_attribute. Там более полумиллиона строчек. 1) отсеять из связочной таблицы product_to_attribute все товары, у которых нет атрибута 12 или 23. Строчек стало меньше 2) отсеять все товары, у которых нет атрибутов 2, или 37, или 42, или 54, или 1 3) отсеять все товары, у которых нет атрибутов 4 или 38. .. и т.д. Не заменяйте нна лефт джойн, это было неверно. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 22:49 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
НеофитSQL, Разве такое не полностью эквивалентно одному in() с перечислением ВСЕХ идентов атрибутов? И оптимизатор не преобразует такой набор AND в один просмотр? Подозреваю, что преобразует, т.к. на Ix86 наборе команд есть префикс повторения, с помощью которого поиск значения в списке (наборе) делается вовсе "одной командой" .. ну, по крайней мере, соблазн велик. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 05:56 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Alex_Ustinov, почти. Тут непонятно какая версия мускуля, перконы или марии в пользовании. Ну и ещё вспомнилось (не знаю как сейчас), MyISAM имеет плохое масштабирование к количеству приджойненных табличек и особенно в режимах GROUP BY/HAVING .. я бы все же перешел на другой движок. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 08:19 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
НеофитSQL Начать с таблицы product_to_attribute. Там более полумиллиона строчек. 1) отсеять из связочной таблицы product_to_attribute все товары, у которых нет атрибута 12 или 23. Строчек стало меньше 2) отсеять все товары, у которых нет атрибутов 2, или 37, или 42, или 54, или 1 3) отсеять все товары, у которых нет атрибутов 4 или 38. .. и т.д. "Отсекаем всё лишнее" - это и про SQL. Если же попытаться серверу "помочь", заставив его хитровывернутыми конструкциями делать вот именно так - практически наверняка станет только хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 09:51 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
<dup - del> ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 09:51 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
ScareCrow, спасибо, буду разбираться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 12:43 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
Arhat109 Alex_Ustinov, почти. Тут непонятно какая версия мускуля, перконы или марии в пользовании. Ну и ещё вспомнилось (не знаю как сейчас), MyISAM имеет плохое масштабирование к количеству приджойненных табличек и особенно в режимах GROUP BY/HAVING .. я бы все же перешел на другой движок. версия MySQL указана в первом сообщении 5.7.31. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 12:44 |
|
Несколько Join таблицы саму на себя
|
|||
---|---|---|---|
#18+
para_bit, В таком разе, как понимаю innoDb и xtraDb несколько не одно и тоже.. но пусть меня поправят, если ошибся. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 22:26 |
|
|
start [/forum/topic.php?fid=47&msg=40005232&tid=1828360]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
127ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 236ms |
0 / 0 |