Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Uchebnoe_posobie_MySQL_4.doc
Скачиваний:
20
Добавлен:
02.04.2015
Размер:
7.78 Mб
Скачать
  1. Создание индексов

Таблицы в базе данных могут иметь большое количество строк, которые хра­нятся в произвольном порядке, и их поиск по заданному значению путем по­следовательного просмотра таблицы строка за строкой может занимать мно­го времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет находить нужную строку по заданному значению в соответствующем столбце (столбцах).

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

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

В базе таксопарка в таблице cars первичным ключом является учетный номер машины. Запросы же к базе могут быть основаны на поиске по государственному регистрационному номеру. Чтобы повысить скорость выполнения таких запросов, следует создать индекс по столбцу reg_number, в котором записан регистрационный номер автомобиля:

mysql>CREATE INDEX nomer ON cars(reg_number);

При создании индекса на сервере формируется упорядоченный список значений этого поля, который MySQL использует при выполнении запросов. Если для создания индекса используется несколько полей, то значения второго поля упорядочиваются внутри одинаковых значений первого, третьего – внутри одинаковых значений второго и т.д.

Имя индекса должно быть уникальным в базе данных. После создания индекса MySQL использует индекс для поиска данных автоматически, т.е. в запросах не требуется указывать индекс каким-либо образом.

  1. Вложенные запросы

Вложенный запрос создает результирующую таблицу, данные которой используются внешним запросом. Вложенный запрос помещается в скобках после выражения WHERE.

Создадим вложенный запрос с целью выяснить, на каком автомобиле работал определенный водитель 25 ноября 2008 года:

mysql> SELECT model, reg_number FROM cars

–> WHERE id = ( SELECT car_number

–>FROM timetable

–>WHERE date = ‘2008-11-25’ AND driver_number=1);

Сначала выполняется команда SELECT внутри скобок. MyQSL получает результат вложенного запроса и использует его в условии в выражении WHERE во внешнем запросе SELECT. При этом результаты внутреннего запроса не отображаются. Конструкция запроса в приведенном примере подразумевает, что результат внутреннего запроса должен представлять собой единственное значение. В противном случае в результате выполнения этого запроса появится сообщение об ошибке: “Error 1241: Subquery returns more than 1 row”. Вложенные запросы могут содержать команды SELECT, INSERT и UPDATE, а также SET.

    1. Табличные вложенные запросы

В случае, когда результатом вложенного запроса является не одно значение, а таблица, синтаксис запроса изменяется.

Например, определим, на каких автомобилях работали водители 25 и 30 ноября 2008:

SELECT model, reg_number

FROM cars

WHERE id IN

(

(SELECT car_number FROM timetable

WHERE use_on = ‘2008-11-25’),

(SELECT car_number FROM timetable

WHERE use_on = ‘2008-11-30’)

);

Внешний запрос выбирает модель и регистрационный номер тех автомобилей, учетные номера которых указаны в таблице timetable в записях, относящихся к 25 и 30 ноября 2008 года. Перечень условий для выражения IN пишется через запятую и помещается во внешние скобки. Сначала выполняются вложенные запросы, результаты которых формируют набор значений для выражения IN.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]