SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.01.2017 23:57:36

anseme
Участник
Зарегистрирован: 04.01.2017
Сообщений: 8

Как научится читать mysql запросы?

Есть базовые знания mysql

понимаю всякие простые вещи вроде "SELECT * FROM table1 WHERE table1.status = 1"

Туториалы в сети все какие то упрощенные... там простые таблицы и простые примеры...

Читая запросы со всякими там GROUP BY и JOIN ни как не могу зацепится за логику что бы на автомате понимать суть... И надеюсь поняв, смогу научится составлять запросы.

Мне сложно объяснить, но как то все в запросах не линейно что ли, наоборот как то... не могу понять в общем..

Посоветуйте у кого как было и кто как решал такое непонимание (если оно было)

Может какой то ясный и понятный курс есть?

Неактивен

 

#2 05.01.2017 00:29:28

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3761

Re: Как научится читать mysql запросы?

Для чтения запросов нужно понимать порядок операций. Тогда можно мысленно поставить скобки и порядок исполнения станет линейным. Полезно читать EXPLAIN запросов, особенно EXPLAIN EXTENDED. Читая последний становится понятно какой порядок операций.

Если совсем примитивно, то нужно читать так:
1. читать часть FROM таблица1 JOIN таблица2 ON поле1=поле2 JOIN таблица3 USING(поле3)
это таблицы, к которым идет обращение, а для их объединения используются условия ON, USING и часть условий WHERE, которые связывают таблицы
2. читать часть WHERE (кроме частей, которые использованы для JOIN) - это дополнительные условия отбора ко всем строками, отобранным в 1
3. ORDER BY, GROUP BY - применяются в конце к итогу
4. LIMIT - в самом конце оставляет не все строчки
5. в последную очередь можно посмотреть на перечень полей после SELECT и перед FROM. Значения именно этих полей попадут в результат. Для понимания запроса эта часть не так важна, как она важна для оптимизации. * на этом месте обычно приводит к выборке лишних данных большого объема.

Неактивен

 

#3 07.01.2017 20:17:43

anseme
Участник
Зарегистрирован: 04.01.2017
Сообщений: 8

Re: Как научится читать mysql запросы?

Спасибо, по упражнялся и все стало как то яснее )

А можно как то по простому пояснить по поводу ключей.

К примеру возьмем запрос из mysql-slow.log где есть всякие join

Это просто пример запроса

SELECT
    it.ItemId AS ID,
    it.ref AS REF,
    it.tipo AS TYPE,
    it.state AS ACTIVE,
    ci.IdItem AS CatID,
    c.nameEn AS TypeCategoryEn
FROM
    item AS it
        LEFT JOIN
    category_item AS ci ON (ci.IdItem = it.ItemId)
        LEFT JOIN
    category AS c USING (IdCategory)
WHERE
    it.state = 1

Читал что лучше и быстрее это будет работать если использовать для этого индекс.

Правильно ли я понимаю что мне нужно добавить индексы в поля где я использую сравнения или USING?

Как понять куда и когда нужно ставить индекс, и вообще нужен ли он?
Ставить индекс и выполнять запрос сравнивая время выполнения?

Неактивен

 

#4 07.01.2017 23:36:46

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5239

Re: Как научится читать mysql запросы?

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

соответственно, индекс нужно ставить на те поля, который используются для нахождения строк, т.е в части WHERE и JOIN
вопросы индексирования хорошо описаны в
Шварц Б., Зайцев П., Ткаченко В. MySQL. Оптимизация производительности (2-е издание, 2010)
в сети есть копии.

и посмотрите FAQ №5

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson