Если рассматривать пример с энциклопеди-
ей, то индексация (т.е. алфавитный указатель
или размещение статей в алфавитном порядке)
безусловно, увеличит скорость поиска.
Но если стоит задача добавления в
энциклопедию
новых статей,
их уда-
ление или редактирование, то львиная
часть
времени
этих
операций
будет
тратиться
именно
на обновление
ин-
декса - например, добавление номе-
ра страницы во многие позиции алфа-
витного указателя.
То же самое происходит и с таблицами БД. Чем
больше индексов имеет таблица, тем больше ско-
рость поиска в ней, но и меньше скорость добав-
ления, удаления и изменения записей.
вая
запись
имеет
album_id=1,
что
значит,
что
она
принадлежит
альбому
с
id=1,
т.е.
конец-
формыначалоформыМЗХТ.
Теперь, когда у нас есть кое-какой ма-
териал
для
практики,
рассмотрим,
ка-
кие SQL-запросы мы можем выполнять
для этих данных. Давайте вспомним, как
мы делали
выборку (SELECT) из одной
таблицы. Это было приблизительно так:
SELECT filename FROM mp3
Такой
запрос
означал
выборку
всех
полей filename из таблицы mp3. Теперь поставим
перед собой задачу вывести названия песен и их
исполнителей.
Я
покажу
формирование
запроса
по
шагам.
Во-первых,
нам
необходимо
объеди-
нить в FROM две таблицы:
Рис. 5
M
title
'
*
1
N3XT
2007
f
>
:;K
-
..
..
-•
'
2
. Back For Good
1998
--
Л
* •!»
Ш
к
3
Noname
2006
тшшш
Ш
1
Morandi
Поэтому имеет смысл создавать индек-
сы только по тем полям, по которым непо-
средственно будет вестись поиск, а имен-
но
по
тем,
которые
будут
указываться
в
условии WHERE SQL-запросов.
На самом
деле скорость выборки из таблицы по про-
индексированному полю почти не зависит
от количества записей в ней.
Выборка из нескольких таблиц
Т
еперь рассмотрим запросы не по одной таб-
лице, а по двум или больше. Для
этого создадим уже описанные таб-
лицы album и performer, перейдя не-
посредственно к базе multimedia и,
создав их так же, как создавали таб-
лицу трЗ. Также создадим первич-
ные ключи из полей id в этих таблицах.
Для того, чтобы было на чём тренироваться, до-
бавим пару записей в каждую таблицу. Обратите
внимание, что ключ id у нас уникальный, поэтому
повторения значений в этом поле исключены. В
поле id будем записывать чис-
ла по порядку - 1, 2, и т.д. На-
пример, у меня получилась та-
кая таблица album
(рис. 5)
и таблица performer
(рис. 6)
Обратите внимание, что хотя
тут и есть некоторое соответ-
ствие - альбом с id=1 принад-
лежит исполнителю с id=1, а
альбом с id=2 принадлежит
исполнителю с id=2, но это
просто случайность из-за ма-
лого количества песен в при-
«
мере и не является правилом. Теперь таблица
трЗ выглядит как на
рис. 7.
Тут
обратите
внимание,
что
значения
по-
к
,
лей album_id и perf_id указывают на те id таб-
лиц
album
и
performer,
которым
принадле-
жат соответствующие песни, например,пер-
Рис. 6
І
' К
. ' -
-
2
Modem Talking
3
La Bouche
I
... FROM mp3, performer.
..
Теперь следует указать какие поля нужно
выбирать:
SELECT title, name FROM mp3, performer
V
,
,
...
X
Если выполнить данный запрос, то вы за-
метите, что он выдаст все песни и исполнителей,
но без соответствия одного другому (рис. 8), что
нас
совершенно
не
устраивает,
поэтому
нужно
связать эти две таблицы условием:
filename
АЛ-.-
.
••
save me. mp3
•И*.
»
Рис
. 7
title
Save Me
bitrate
fifesize
morandi.
Modern Talking - Angie's Heart.mp3
Angie'
La Bouche - All I Want.mp3
All I Want
■Ш
ÏWS
320
10967632
2007
1
.....
••• ./
. .
•;
.
.
ушж
id
elfeiim id
perfjd
...
.-'.v,-
1
1
320
9588606
2006
3
Щ&г-%
<
і
Рис. 8
Save Me
iifmcr
Morandi
V •• л •
..
.
Angie's Heart
Morandi
.......
.
.
'
ШШШ
;
.**v.
Ail I Want
Morandi
Save Me
Modem Talking
* ' ■
'>%
'
:>>:•-
&■>
' ' '
.;j&>
Angie's Heart
Modern Talking
.
; v
/ '• •
-
.-••••
.■
. vn
....
••
••
AH I Want
Modern Talking
Save Me
La Bouche
■S--4
Angle’s Heart
La Bouche
All I Want
La Bouche
title
. ::
Г}'*.-••'"' 't. • *'-■
Save Me
SELECT title, name FROM mp3, performer WHERE
mp3.perf
id=performer.id
Данный
запрос
можно
расценивать
так:
“вы-
брать поля title и name из таблиц mp3 и performer
так, чтобы поле perf_id записи таблицы mp3 равня-
лось полю id таблицы performer”. Теперь резуль-
тат будет правильный
(рис. 9).
На самом деле условие mp3.perfjd=per-
former.id реализует внешнее связывание (внеш-
ний ключ) - связь между таблицами mp3 и per-
former по полям id=perf
id. Что собственно нам
и нужно.
Теперь рассмотрим выборку из трёх таблиц.
Выберем все названия песен с именами исполни-
телей и альбомами, которым они принадлежат:
SELECT mp3.title, performer.name, album.title
FROM mp3, performer, album
WHERE mp3.album _id=album.id AND
mp3.perf_id=performer.id
Кое-какая сложность состоит
в том, что некоторые поля (на-
пример, id или title) существуют
в разных таблицах. Поэтому,
чтобы чётко указать принад-
iS-*-
Рис. 9
гште
Morandi
Angie’s Heart
Modern Talking
All I Want
La Bouche
предыдущая страница 37 Компьютер 2011 04 читать онлайн следующая страница 39 Компьютер 2011 04 читать онлайн Домой Выключить/включить текст