Надо мной просто прикалываются. Для большинства знакомых программист — это существо оторванное от мира, живущее в своем маленьком мире. Зато доставляет смотреть как через время они шокируются когда ты не за компом
Ага, заставлять бедных детей учить самое неинтересное — алгоритмы. Ваши алгоритмы забудутся 99% школьников так же как формула дискриминанта почти всеми вашими друзьями — проверьте. Человека нужно заинтересовать, давать реальные практические и полезные задачи. А их можно давать даже с минимальными знаниями. Вот тогда в голове осядет что-то. К интересным задачам подоспеют решения — вот там и алгоритмы помогут и у школьника может даже и не возникнет вопроса «зачем они нужны».
Я ожидал, что в пример будет приведен эталон Оракл. Речь идет о нарушении стандартов. Например, group by мускула позволяет делать выборку полей, которые не участвуют в группировке. Это отход от стандарта. В большинстве случаев можно обойтись и без специфичных хаков
либо повышать точность времени, либо принять, что с одинаковым временем более поздний платеж с бОльшим id. Мой запрос, удовлетворяющий этому условию, ниже вашего)
SELECT p.uid, p.amount
FROM payments p
JOIN
(SELECT uid, MAX(pay_date*1000000 + id) AS max_dt
FROM payments
GROUP BY uid) sel ON p.uid = sel.uid
AND (p.pay_date*1000000 + p.id) = sel.max_dt;
Думаю план у него будет плохим, да и 1000000 надо заменить на «очень большое значение». Короче, просто такой себе вариант
ну так авторизуется он же по логину/паролю, дальше получает сессию и выборка идет по нет. Если говорить об оптимизации, то сессию можно сделать из двух частей: id юзера и самой сессии, выборку делать по id и проверять сессию. Но сам запрос выше совершенно часто встречается
Ну я понял, mssql использует бинарный протокол и при этом еще и _параллельно_ парсит и конвертит запросы с плейсхолдерами в одну строку. Двойная работа.
А еще мне понравилось ваше высказывание, что раз IN(..) редко используется, значит и проблемы нет. Вы понимаете, что если хотя бы раз оно используется, то уже надо что-то делать чтоб заменить плейсхолдеры?
Думаю план у него будет плохим, да и 1000000 надо заменить на «очень большое значение». Короче, просто такой себе вариант
А еще мне понравилось ваше высказывание, что раз IN(..) редко используется, значит и проблемы нет. Вы понимаете, что если хотя бы раз оно используется, то уже надо что-то делать чтоб заменить плейсхолдеры?