Давно не работал с SQL Server, сейчас даже попробовать не на чем. Порывшись в интернете понял, что мои знания из Oracle, который изучал некоторое время назад.
Признаю свою ошибку и правлю фразу. Всем спасибо за бдительность :-)
Да, MySQL оптимизатор переписывает запросы, но на это он тратит немного ресурсов и всегда есть шанс, что его запрос не будет на 100% оптимальным. Так что если есть возможность помочь оптимизатору, то почему бы этого не сделать?
select distinct int_value
from null_equals_zero
group by group_value;
изначально некорректный, но отрабатывается из-за специфических особенностей MySQL. Вот так можно проверить валидность запроса:
SET sql_mode = 'ONLY_FULL_GROUP_BY';
SELECT distinct int_value
FROM null_equals_zero
group by group_value;
Error Code: 1055. 'test.null_equals_zero.int_value' isn't in GROUP BY
Звучит заманчиво. Хотя, если на написании это статьи я вдохновлялся 4 месяца и пять дней писал, то даже не знаю, сколько понадобится времени на то, чтобы написать следующую. С другой стороны, никто не торопит, поэтому спасибо за подсказку. Буду вынашивать следующую статью.
Спасибо за поздравление и отзыв.
Про написании статьи о сдаче на сертификат, даже не знаю. Вряд ли смогу написать целую статью, но попробую осветить в этом комментарии.
После сдачи сертификата Zend Certified Engineer PHP 5.3, этот казался намного проще, потому что ответы на 90% вопросов можно найти в книге «MySQL Certification Study Guide» аж за 2005 год! Как правильно дал ссылку mcshadow, экзаменационные темы можно найти здесь.
Первую часть экзамена, после прочтения книги, сдал очень легко, почти на одном дыхании, а вот вторая имела много вопросов, для решения которых приходилось работать SQL парсером и выискивать неправильные запросы, а также вопросы-обманки, чьей целью было запутать экзаменуемого как вопросом, так и подсовывая похожие варианты ответов. Так что если человек обладает не точными знаниями, то можно легко поплыть. Тем более, что во второй части нужно разбираться в хранимых процедурах, триггерах и вьюхах.
В целом же, гарантирую, что экзамен будет сдан любым программистом, который часто работает с MySQL и прочитал книгу (см.выше)
Дословно сертификат называется «Oracle Certified Professional, MySQL 5 Developer». Вот так он выглядит pp.userapi.com/c315717/v315717466/1dce/i-NuzndaEM0.jpg
Спасибо за положительный отзыв. Рад, что статья понравилась.
Признаю свою ошибку и правлю фразу. Всем спасибо за бдительность :-)
habrahabr.ru/post/196692/#comment_6825020
Обе таблицы имеют примерно 200000 непоследовательных (хаотичных) записей.
В итоге:
Подзапрос и EXISTS отрабатывал за 13.7 секунды
JOIN за 3.2 секунды
изначально некорректный, но отрабатывается из-за специфических особенностей MySQL. Вот так можно проверить валидность запроса:
Про написании статьи о сдаче на сертификат, даже не знаю. Вряд ли смогу написать целую статью, но попробую осветить в этом комментарии.
После сдачи сертификата Zend Certified Engineer PHP 5.3, этот казался намного проще, потому что ответы на 90% вопросов можно найти в книге «MySQL Certification Study Guide» аж за 2005 год! Как правильно дал ссылку mcshadow, экзаменационные темы можно найти здесь.
Первую часть экзамена, после прочтения книги, сдал очень легко, почти на одном дыхании, а вот вторая имела много вопросов, для решения которых приходилось работать SQL парсером и выискивать неправильные запросы, а также вопросы-обманки, чьей целью было запутать экзаменуемого как вопросом, так и подсовывая похожие варианты ответов. Так что если человек обладает не точными знаниями, то можно легко поплыть. Тем более, что во второй части нужно разбираться в хранимых процедурах, триггерах и вьюхах.
В целом же, гарантирую, что экзамен будет сдан любым программистом, который часто работает с MySQL и прочитал книгу (см.выше)
Спасибо за положительный отзыв. Рад, что статья понравилась.