
Alexey
07.02.2018
21:14:45
хороший вопрос, да

Сергей
07.02.2018
21:32:10
Может они какие-то за два считают
Ну везде 64 гига памяти, а в новых 128 значит будим считать за два

Pavel
08.02.2018
15:31:48
Правда что LEFT JOIN работает быстрее чем JOIN ?

Google

Сергей
08.02.2018
15:34:22
просто join это inner join? вообще нет, inner самый быстрый

lost
08.02.2018
15:35:34

Pavel
08.02.2018
15:36:38
У меня в команде некоторые почему то упорно пишут LEFT JOIN, утверждая что раз там внешние ключи все контролируют, то это безопасно, т.к. при выборке движок не будет делать дополнительных сравнений

Сергей
08.02.2018
15:37:32
причем тут безопасность я хз

Pavel
08.02.2018
15:39:29
Вот представь что в таблице A все записи имеют FK на записи таблицы B. Тогда A LEFT JOIN B будет давать такой же результат как и A JOIN B
Но при этом скорость выборки в первом и втором случае якобы разная

Сергей
08.02.2018
15:43:32
это разные запросы и результаты
join = inner join

Anton
08.02.2018
15:44:21
Сергей В конкретном случае с FK - одинаковые
но это только на первый взгляд))))
А дальше я выключу проверку, вставлю кучу ххрени, включу назад
и будет всем веселье

Google

Сергей
08.02.2018
15:45:23

Pavel
08.02.2018
15:45:28

Сергей
08.02.2018
15:46:16

Pavel
08.02.2018
15:46:20
> и inner будет быстрее
То есть это противоположно тому что у нас используется, значит надо будет бенчмаркать.

Anton
08.02.2018
15:46:29
Сергей Наивный))))
@chebotarevp нигде в доке я не видел, чтобы при FK доп проверка выключалась, именно по той причине, что я описал. Может что-то и упустил конечно, но вряд ли

Сергей
08.02.2018
15:46:55
если у вас fk null=True то вы на что-то всегда будете ссылаться

Anton
08.02.2018
15:47:18
Сергей " т.к. при выборке движок не будет делать дополнительных сравнений"

Сергей
08.02.2018
15:47:24
ну еще strict mode on

Anton
08.02.2018
15:48:03
Сергей я имел ввиду не удаление ключа, а просто foreign_key_checks
это к вопросу о "ты не квлючишь назад"

Сергей
08.02.2018
15:49:57
foregn_key_check это зашквар какой-то...

Pavel
08.02.2018
15:49:59

Сергей
08.02.2018
15:50:25
я вообще с постгресом работаю и таких проблем не знаю
не нужны проверки - не делай fk

Anton
08.02.2018
15:50:46

Сергей
08.02.2018
15:50:53
не обязательный - сделай null=True
но inner join всегда быстрее по своей сути. и там и там

Google

Pavel
08.02.2018
15:51:45
Ок, будем глубоко копать и бенчмаркать значит

Anton
08.02.2018
15:51:47

Сергей
08.02.2018
15:54:50
https://stackoverflow.com/questions/2726657/inner-join-vs-left-join-performance-in-sql-server
вот тут холиварят

Anton
08.02.2018
15:55:25
А ничего, что это другая БД с другим оптимизатором?

Сергей
08.02.2018
15:57:08
принципы одни

Anton
08.02.2018
15:58:04
ну, я пожалуй с фейспалмом удалюсь. Сравнивать разные бд в таких уже глубоких вопросах реализации алгоритмов - ну я как-то х.з., к чему это может привести.

Сергей
08.02.2018
15:59:29
там нет никакой магии же
такие простые вещи везде одинаково почти сделаны

lost
08.02.2018
16:06:03
да что вы...
вот это ваше почти одинаково потом боком выходит
реализация join в разных субд отличается, и в mysql она одна из самах говёных, если что

Anton
08.02.2018
16:07:14
Реализация ВСЕГО я бы сказал отличается. Поиск, выборка, методология вставки, работы с дисокм и пр и пр.
Для Джуна конечно джойно один и тот же в принципе☺️
Но если смотреть глубже, то реализация везде разная
и объединяет их только стандарт SQL

Pavel
08.02.2018
16:09:01
https://stackoverflow.com/questions/1810465/left-join-faster-or-inner-join-faster
Вот тут написано что может быть существенное различие

Anton
08.02.2018
16:09:33
EXPLAIN EXTENDED - это что-то не из MySQL

Pavel
08.02.2018
16:10:00
Хм да, странно что тег mysql висит

lost
08.02.2018
16:12:50

Google

Alexey
08.02.2018
18:04:00
или уже не знает. EXTENDED уже не нужен

Anton
08.02.2018
18:05:25
накинулись!
Каюсь, забыл. Ибо последний раз встречал такое года 4 назад

Alexey
08.02.2018
18:05:49
но я не согласен, что в mysql какой-то не такой join. nested loop — классический алгоритм, чего с ним не так? hash джойнов нет? так есть batch key access, который по сути hash джойн "наоборот"

Anton
08.02.2018
18:05:52
А уже деклассировать готовы?

Alexey
08.02.2018
18:08:43
я к тому, что многие ребята по привычке пишут EXPLAIN EXTENDED. а про это уже можно смело забывать. я вот уже сам почти забыл

lost
08.02.2018
19:54:55
оно почти никакой смысловой нагрузки не несёт все равно, почти всё можно увидеть в обычном explain, что до варнингов дело не доходит

Alexey
08.02.2018
20:30:32
для специалистов иногда полезно. там можно увидеть работу оптимизатора, которая не зависит от костов, типов джойна и пр. т.е. оптимизации, которые делаются исходя из текста запроса

Alex
08.02.2018
20:41:03
всем привет. есть мастер-слейв (перкона 5.6-33), репликация с использованием SSL. на мастере проэкспайрился сертификат. Вопрос - можно ли "на горячую" подкинуть новый серт без перезапуска мускуля на мастере?

Alexey
08.02.2018
20:54:52

Alex
08.02.2018
20:56:00
жаль, конечно, спасибо за инфу

Alexey
08.02.2018
20:57:05

Алексей
08.02.2018
21:43:34
Есть один столбец, в котором цифры, которые могут повторяться. Как сделать, чтобы для повторяющихся цифр во втором столбце была автоматическая нумерация?)

Anton
08.02.2018
21:45:44
триггером.
но проще в код записи вынести

Алексей
08.02.2018
21:45:58
В phpmyadmin попроще никак?
Я думал это там должно называться как-то вроде "index", но видимо это совсем другое. Плохо, когда не разбираешься)

Anton
08.02.2018
21:46:50
В phpmyadmin вообще ничего никак

Алексей
08.02.2018
21:47:48
Ну есть же auto increment, он видимо не завязывается на определенный столбец? И да, его обнулять нужно если что-то удалил) Т.к. будет нумеровать не с единицы.

Anton
08.02.2018
21:49:26
Автоинкремент общий на таблицу, а не на столбец

Google

Алексей
08.02.2018
21:49:36
окей

Anton
08.02.2018
21:49:45
и он не зависит от удаления, этто просто счёттчик
То, что ты хочешь, делается кодом. Лучше кодом при изменении/добавлении. Хуже - кодом триггера

Алексей
08.02.2018
21:50:37
окей, хоть это и плохо. А ORACLE не спасёт в такой ситуации? Извиняюсь за гипотезу.

Anton
08.02.2018
21:51:13
Оракл слишком накладный для таких простых манипуляций))))
Даже если бы и спас))))
Там кода - 5 строк

Алексей
08.02.2018
21:51:33
хех)) ну окей. Да и там наверное это тоже "триггеры" называется
есть такое, ну ладно

Anton
08.02.2018
21:52:26
Лучше делать ппрямо в коде. Триггеры - намного хуже вариант
Хоття, вряд ли у теебя какой-то высоконагруженный проект, так чтто и они сойдут

Алексей
08.02.2018
21:53:06
То есть оптимальнее сделать SELECT запрос и послать INSERT, чем сделать INSERT с триггером?

Anton
08.02.2018
21:54:05
Но если у тебя база для простого сайтика с десятком запросов в секунду - можно и не заморачиваться.

Алексей
08.02.2018
21:55:02
Второе) Благодарю :)

Anton
08.02.2018
21:55:09
и сделать триггеры. НА простановку при инсерте и на пересортировку при апдейт/делет

Алексей
08.02.2018
21:55:30
оки

Anton
08.02.2018
21:56:37
если тебе надо ппрроставить счётчик в кучи уже имеющихся записей - можешь копнуть в сторону сессионных переменных