Как работает условия WHERE? | Грань программирования
Link in progress
Обо мне
Как работает условия WHERE?

where_sql_how_is_work Доброе время суток. Сегодня хочу объяснить в нескольких словах, чем условия WHERE опасен в запросах и как лучше его применять.
Из своего названия, условия WHERE создано для того, чтобы выводить, обновлять или удалять данных из БД нужным нам условиям. Но как он работает? Разберем пример:

1
SELECT name FROM user WHERE gender = 1

В этом запросе будет выбраны записи из колонки name таблицы user где в колонке gender таблицы user значение 1. В этом случае условия WHERE работает так, как мы и ожидали. Что будет, если нам нужно извлечь из двух или трех таблиц? Конечно, можно использовать вложение запросы или даже разбить свой код так, что у нас будет по оному запросу к одной таблице. Это будет работать? Да, работать это будет. Это хороший стиль программирования? Нет, не хороший. Например:

1
SELECT user.name, user.address, class.number FROM user,class WHERE gender = 1

Этот метод объединения называет CROSS JOIN. Данные в результате мы получим те, которые ожидали, но есть одно НО. Как в этом случаем работает сама выборка из БД: берется 2 таблицы, в нашем примере это user и class и сливаются (объединяются) в одну. Как это выглядит, например у нас есть такая структура БД:

1
2
3
4
5
6
7
8
9
10
11
  name
id | name
1  | Smitn
2  | Koul
3  | Merry

  class
id | number
1  | 5a
2  | 7b
7  | 11a

Наш запрос БД воспринимает так:
Берется первая строка из таблицы name, добавляется ВСЕ строки из таблицы class, далее берется вторая строка таблицы name и снова добавляются все данных их таблицы class и так далее до тех пор, пока данные в таблице name не заканчиваются. После чего БД смотрит, что мы еще указали условие, и начинает перебирать все полученные данные методом: «Это подходит – оставляем, это не подходит – выбрасываем». Если у вас в таблице данных очень мало – тогда вы, наверное, и не поймете, куда ресурсы вашего хостинга деваются, но представьте себе, что у этих таблицах по 1млн строк… Бросает в жар после таких мыслей.
Помните, условия WHERE работает ПОСЛЕ выборки из БД и выступает как фильтр перед выводом собранных данных. Для того, чтобы избежать такого перелапачивание данных, нужно использовать объединение JOIN. Об этом мы поговорим в следующем посте.

С уважение, ProIn.

P.S.
Привезите мне полную фуру арбуз, я из них выберу себе три штучки…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Max quality, min price, min time expenditure
Send me a message to: work@glogla.net
Portfolio