- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Продолжаю заниматься оптимизацией запросов и заметил такую штуку - уже на 5-м запросе типа SELECT замена INNER на LEFT ускоряет запрос как миниму в 2 раза, а то и в 10. Почему так происходит?
Вот пример - время выполнения 4 сек.
CONCAT_WS('-', t2.id, t2.alias) AS item_alias,
CONCAT_WS('-', t3.id, t3.alias) AS category_alias,
CONCAT_WS('-', t4.id, t4.alias) AS section_alias
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.object_id = t2.id AND t1.object_group = 'com_group'
LEFT JOIN table3 AS t3 ON t2.category_id = t3.id
LEFT JOIN table4 AS t4 ON t2.section_id = t4.id
ORDER BY t1.id DESC LIMIT 3;
Меняем INNER на LEFT - результат запроса остается тот же, а время сокращается до 0,005
CONCAT_WS('-', t2.id, t2.alias) AS item_alias,
CONCAT_WS('-', t3.id, t3.alias) AS category_alias,
CONCAT_WS('-', t4.id, t4.alias) AS section_alias
FROM table1 AS t1
LEFT JOIN table2 AS t2 ON t1.object_id = t2.id AND t1.object_group = 'com_group'
LEFT JOIN table3 AS t3 ON t2.category_id = t3.id
LEFT JOIN table4 AS t4 ON t2.section_id = t4.id
ORDER BY t1.id DESC LIMIT 3;
---------- Добавлено 23.09.2017 в 12:36 ----------
Ну и ещё к изучению: http://blog.sergey-lysenko.ru/2011/12/inner-left-and-right-joins.html
Меняем INNER на LEFT - результат запроса остается тот же, а время сокращается до 0,005
Но у вас и результат должен быть разный
1-й запрос != 2-му запросу
Не стесняйтесь - показывайте реальные названия таблиц и колонок
Так проще понять и связи и остальное
Потому что первый вообще какой-то "левый"
за счет
INNER JOIN table2 AS t2 ON t1.object_id = t2.id AND t1.object_group = 'com_group'
ЗАчем? если t1.object_group не в видимости t2
Может Вам нужен
---------- Добавлено 23.09.2017 в 12:53 ----------
LEOnidUKG, Но это никак не объясняет разницы в быстродействии
Дайте угадаю, таблица table2 у вас маленькая?
INNER JOIN обычно быстрее LEFT JOIN, у вас либо не хватает индексов либо хз что. То что вам тут дали картинку, это хорошо, но это не объясняет такого поведения. По картинке, кстати, ясно, что INNER JOIN абсолютно не эквивалент LEFT JOIN.
P.S. Пока писал, появился пост выше, почти такой-же.
Дайте угадаю, таблица table2 у вас маленькая?.
table1 самая большая - более 300.000 записей
table2 - примерно 25000
остальные мизер. На всех полях что участвуют в объединении есть индексы. Результат запроса одинаков абсолютли
---------- Добавлено 23.09.2017 в 13:04 ----------
Потому что первый вообще какой-то "левый"....
Может Вам нужен...
Попробовал ваш запрос - результат тот же - время выполнения 4,4 сек. т.е. дольше всех
Загрузите на SQL Fiddle схемы, можно будет подумать как оптимизировать.
LEOnidUKG, Но это никак не объясняет разницы в быстродействии
Я привёл информацию, что это разные инструменты и результаты будут разные. Просто так заменить слова и радоваться не получится.
Я вообще стараюсь избегать таких запросов, лучше несколько простых и перебор, чем вот такие конструкции и потом ищи гадай, что и зачем, почему это сжирает память и ещё по 4-6 секунд выполняется.
тут можно экспериментировать сколько угодно
Например меняем порядок таблиц
---------- Добавлено 23.09.2017 в 13:16 ----------
Я привёл информацию, что это разные инструменты и результаты будут разные. Просто так заменить слова и радоваться не получится.
Я вообще стараюсь избегать таких запросов, лучше несколько простых и перебор, чем вот такие конструкции и потом ищи гадай, что и зачем, почему это сжирает память и ещё по 4-6 секунд выполняется.
Та нормальный запрос, То вы, наверное не видели джойнов по 10 таблиц, и вложенных запросов.
Может ещё вместо INNER сделать подзапрос SELECT, думаю будет быстрее.
Например меняем порядок таблиц
Неизвестный столбец 't2.object_id' в 'on clause'
FROM table1 AS t1
INNER JOIN table2 AS t2 ON t1.object_id = t2.id'
FROM table2 AS t2
INNER JOIN table1 AS t1 ON t1.object_id = t2.id' AND t1.object_group = 'com_group'
Мабуть так