Как стать автором
Обновить
46
0
Афанасьев Юрий @Oriand

Backend Developer

Отправить сообщение
Давно не работал с SQL Server, сейчас даже попробовать не на чем. Порывшись в интернете понял, что мои знания из Oracle, который изучал некоторое время назад.
Признаю свою ошибку и правлю фразу. Всем спасибо за бдительность :-)
А вот тут ты не прав. Когда работал с Microsoft SQL Server, то пару раз использовал такой синтаксис и тогда узнал о нём впервые.
Несмотря на то, что MySQL пытается улучшить запрос, у него это не очень хорошо получается. Результаты своего эксперимента описал в этом комментарии

habrahabr.ru/post/196692/#comment_6825020
Да, делал эксперимент из двух таблиц t11 и t22, имеющие общую структуру:

CREATE TABLE `t11` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `t11` varchar(45) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=202981 DEFAULT CHARSET=latin1


Обе таблицы имеют примерно 200000 непоследовательных (хаотичных) записей.

В итоге:
Подзапрос и EXISTS отрабатывал за 13.7 секунды
JOIN за 3.2 секунды
Не могу точно ответить, т.к. под руками нет SQLite, но, в самом плохом случае, никто не мешает сделать так:

SELECT * FROM table1 WHERE (col1 || col2) = (SELECT col3 || col4 FROM table2)
Могу порекомендовать мою предыдущую статью по MySQL. В ней тоже много интересных нюансов habrahabr.ru/post/166411/
Спасибо за идею! Изменил.
Да, 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
Спасибо за положительный отзыв. Рад, что статья понравилась.

Информация

В рейтинге
Не участвует
Откуда
Россия
Работает в
Зарегистрирован
Активность