Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SQL_in_action.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
345.09 Кб
Скачать

XI. Операторы манипулирования данными. Обновление данных

Общая форма оператора обновления

Update таблица

set поле=выражение [,поле=выражение]...[where предикат]

1. Обновление единственной записи.

Изменить цвет детали P2 на желтый, увеличить ее вес на 5 и установить значение города "неопределен".

Update P set цвет='желтый',

вес=вес+5,

город=NULL

where номер_детали='P2'

Результат: Таблица S c внесенными изменениями.

2. Обновление множества записей.

Удвоить рейтинг всех поставщиков в Лондоне.

Update S set рейтинг=2*рейтинг

where город='Лондон'

Результат: Таблица S с увеличенным рейтингом для поставщиков из Лондона.

3. Обновление с подзапросом.

Установить объем поставок, равный нулю для поставщиков из Лондона.

update SP set количество=0

where 'Лондон'=

(Select город

from S

where S.номер_поставщика=SP.номер_поставщика)

Результат: Таблица SP с внесенными изменениями.

3. Практические советы

1. Хорошо знайте свои данные и бизнес-приложение

Знание источников и объемов получения данных является обязательным. Вы также должны иметь полное понимание используемой модели данных (равно как и связей между разными бизнес-объектами) до написания требуемых операторов SQL.

2. Тестируйте свои запросы на реалистических данных

3. Внимательно относитесь к использованию индексов на таблицах

Постарайтесь создать все необходимые индексы. Создание индекса:

Create index <имя_индекса> on <имя_таблицы> (<имя_поля>,.. имя_поля>,..)

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

Запрос

Select . . . from Persons where company_id=105

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

Однако слишком большое число индексов может привести к снижению эффективности. Основные правила:

  1. Создавайте индексы только в тех случаях, когда число строк > 200.

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

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

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

  5. Не индексируйте столбцы, которые используются только в функциях.

  6. Не индексируйте часто изменяемые столбцы.

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

4. Для фильтрации записей используйте where, а не having.

При использовании having вместе с group by на индексированных столбцах индекс не используется. Фильтруйте строки с помощью раздела where. Если для таблицы EMP существует индекс на столбце DEPTID, при выполнении следующего запроса этот индекс использоваться не будет:

Select deptid, sum(salary)

From emp

Group by deptid

Having deptid = 100;

Однако этот запрос можно переписать так, чтобы индекс применялся:

Select deptid, sum(salary)

From emp

Where deptid = 100

Group by deptid;

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