Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Пока только три таблицы... посоветуйте
 
 автор: Valick   (16.04.2008 в 23:49)   письмо автору
 
 

Есть три таблицы (+ ещё одна в уме)
1) автомобили (avto.tbl)
id_avto | brand | marka

2) услуга (usl.tbl)
id_usl | usl | norma

3) работа (work.tbl)
id_work | chislo | zn | id_avto | vin | id_usl | prim

Вот такой запрос у меня получился:
$query="SELECT work.id_work,work.chislo,work.zn,avto.brand,avto.marka,work.vin,usl.usl,usl.norma,work.prim
    FROM work,avto,usl
    WHERE work.id_avto=avto.id_avto AND work.id_usl=usl.id_usl";


Может запрос можно как-то оптимизировать?
Прочитал, что чем многотабличнее запрос тем больше нагрузка на базу, а какая есть альтернатива?
к этим таблицам в будущем добавиться таблица механиков, и потом выборку надо будет делать по каждому механику в отдельности.

З.Ы. тапками чур не кидаться... это вообще мой первый SQL-запрос)

   
 
 автор: ronin80   (17.04.2008 в 08:10)   письмо автору
 
   для: Valick   (16.04.2008 в 23:49)
 

1. обязательно индексация первичных и внешних ключей.
2. желательно проиндексированть поля по которым происходит поиск (в дополнительных условиях отбора)
3. желательно связь таблиц организовывать по числовым полям, т.е. не связывать по текстовым полям типа фамилия, или составным ключам
4. надо понимать что чем сложнее структура таблиц и связей между ними и чем сложнее запрос (чем больше таблиц в нём участвует) тем дольше он будет выполняться, соответственно в некоторых случаях можно применять денормализацию БД, т.е. например не вытаскивать какое-то поле через 5 таблиц а дублировать его в нужной таблице (продумать в интерфейсе программы такие действия), соответственно и запрос будет проще и выполняться будет быстрее
5. проверять выполнение запроса через Explain, можно определить неэффективные конструкции и избавиться от них
6. ну и конечно прежде чем запускать программу (сайт) в работу необходимо протестировать его, смоделировать всевозможные ситуации, отловить баги и тормозные моменты

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

а запрос вроде нормальный :)

   
 
 автор: Valick   (17.04.2008 в 14:05)   письмо автору
 
   для: ronin80   (17.04.2008 в 08:10)
 

Спасибо большое за развёрнутый ответ.
1) Индексацию первичных и внешних ключей (пока ещё не разобрался с внешними, а первичные вроде как осмыслил) надо указывать при создании таблицы?
2) связь у меня происходит по id_avto, id_usl всё это исключительно цифры. Я так понимаю первичный ключь id_avto из таблицы avto должен являтся внешним для таблицы work , в какой таблице это надо пометить или как это происходит?
3) денормализация - это только для ускорения выборки и уменьшения нагрузки на базу или ещё какие-то тайные смыслы есть?
продумать в интерфейсе программы такие действия - просто писать сразу в две-три таблицы?
4) об этом прочитаю в книге если найду)
5) программу (сайт) запускать никуда не собираюсь))) я это делаю для себя (для расчёта своей заработной платы (ну и если захотят з/п коллег тоже) + получение навыков работы с базой данных)
конфигурация сервера и СУБД - Денвер))

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования