Всем привет, являюсь php-программистом, работаю с бд на уровне(select,insert,delete).
Тут столкнулся с оптимизацией бд, и в процессе работы гуглил, хотелось бы подучить эту часть, что посоветуете?
Нашел интерактивные учебники по sql'ю, но задания там по типу "Сделайте выборку с такими то условиями" и т.д. не устраивают, так как это все и так понимаю, хотелось бы тонкости.
Например:
Как нормализировать бд, как структурировать данные, как правильно вешать индексы, где нужны, где нет, какие запросы составлять лучше и т.д.
Хотелось бы какой-нибудь курс или цикл статей по sql'ю.
Заранее благодарю.
Благодарю за ответ.
Видел уже этот интерактивный учебник, при беглом взгляде, мне показалось, что там только запросы, и при каждом последующем упражнение, они просто усложняются(довешивается where), а остальное дело логики.
Мне бы хотелось более что-нибудь сложнее обширное, а не ограничиваться запросами SELECT.
sqlex в целом дает хорошее понимание на select, update частный случай select, как по мне. Но изучать правильность написания запросов лишь по одному sqlex не стоит. Иногда там не хорошим вещам учат. Например связывать таблицы через запятую, или везде писать distinct.
Напишите Highload проект, к примеру собирайте какую-нибудь информацию с сайтов.
В процессе написания кода, начнете гуглить точечно про оптимизацию запросов и со временем придет общее понимание.
Благодарю за ответ, но я не люблю такой подход в обучение, нету структурированности.
Самое лучшее, на МОЙ ВЗГЛЯД, читать цикл статей и параллельно что-то делать, тем самым повышая уровень знаний и проекта одновременно, а так можно бесконечно гуглить и не понимать что, откуда и почему
1. научиться в explain и slow query log
2. почитать немножко о самых популярных движках (если это мускул, то myisam и innodb)
3. понять, что те-же индексы могут офигенно ускорить выборку, но замедлить вставку (!)
4. почитать о блокировках
5. начать экспериментировать на больших НАГРУЖЕННЫХ таблицах.
вот здесь и выплывает совет Дмитрий Богданов, о создании хайлоад проекта. Где вы еще найдете нагруженную БД, на которой можно экспериментировать?
Начните собирать котировки с форекса, или результаты матчей dota2, или еще какую-нибудь ненужную фигню, которой достаточно много чтобы получить заметную нагрузку и которую не особо жалко уронить несколько раз во время экспериментов.
Напишите какую-то аналитику по этим данным.
ХИНТ: если собирать не совсем мусорные данные, то можно попытаться сделать полезный сервис.
если вы участвуете в проекте где уже БД есть, то не забивайте голову нормализацией (сейчас для ускорения иногда от нее даже уходят в сторону денормализации данных, но это вам пока точно не надо)
1. научитесь отлавливать запросы которые выполняются долго (по общему сумарному времени работы CPU)
для этого научитесь мониторить такие вещи (zabbix, pgbadger, логи)
2. после выявления ресурсоемких запросов смотрите их explain
3. оптимизируейте эти эксплейны в сторону улучшения стоимости запроса (либо в сторону уменьшения потребления shared buffers если проект высоконагруженный и много пользователей)
Благодарю за ответ.
Да оптимизация, важный момент, который я бы хотел знать намного лучше, чем в данный момент.
Но это всего лишь одна сторона всего sql, хотелось бы затронуть и что-нибудь другое, чтобы было все в одном месте,а не метаться по всему интернету и из массы информации выбирать нужную.
А по вашему ответу пошел гуглить, новая инфа :)
Сейчас читаю "High Performance MySQL", третье издание. Там довольно много всякой информации насчет оценки производительности, оптимизации запросов, индексов, работы разных движков MySQL и т.д. Может быть вам тоже эта книга покажется полезной.
Я сам в оригинале читаю. Поискал. На русском тоже есть, называется "MySQL по максимуму. 3-е издание". Оглавление и первые главы можно посмотреть тут
Она же на озоне
First Name, В книге даны упражнения и ответы. Вот это тоже очень ценно. Вы сможете установить БД на свои ПК, А потом вместе проходить упражнения. В конце дня сравнивать свой результат с ответами в книге.