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

Форум MySQL

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

 

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

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

тема: оптимизация запроса
 
 автор: fox2011   (23.02.2012 в 12:24)   письмо автору
 
 

Имеются таблицы:

CREATE TABLE `Manufacturers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
+----+--------------------+
| id | name |
+----+--------------------+
| 1 | CDEF Manufacturing |
| 2 | Dell Ltd |
| 3 | JDF Ltd |
| 4 | Motor inc |
+----+--------------------+
CREATE TABLE `parts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(30) NOT NULL,
`man_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
+----+-----------------+--------+
| id | name | man_id |
+----+-----------------+--------+
| 1 | DVD burner | 1 |
| 2 | Laptop | 2 |
| 3 | Power supply | 2 |
| 4 | Display adapter | 3 |
| 5 | Network hub | 1 |
| 6 | Sound card | 3 |
+----+-----------------+--------+

Правильно ли я написал запрос?

SELECT p.name, m.name from parts p INNER JOIN Manufactures m ON p.man_id=m.id ORDER BY p.name DESC?

  Ответить  
 
 автор: cheops   (23.02.2012 в 12:44)   письмо автору
 
   для: fox2011   (23.02.2012 в 12:24)
 

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

  Ответить  
 
 автор: fox2011   (24.02.2012 в 11:36)   письмо автору
 
   для: cheops   (23.02.2012 в 12:44)
 

А с точки зрения оптимизации?..
Можно ли его как-то минимизировать?

  Ответить  
 
 автор: cheops   (24.02.2012 в 12:45)   письмо автору
 
   для: fox2011   (24.02.2012 в 11:36)
 

Запрос, пожалуй, уже никак не оптимизируешь. Можно добавить индекс в таблицу parts на поле man_id.

  Ответить  
 
 автор: fox2011   (24.02.2012 в 14:26)   письмо автору
 
   для: cheops   (24.02.2012 в 12:45)
 

объясните, а зачем добавлять индекс в таблицу parts?

  Ответить  
 
 автор: cheops   (24.02.2012 в 14:34)   письмо автору
 
   для: fox2011   (24.02.2012 в 14:26)
 

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

  Ответить  
 
 автор: fox2011   (24.02.2012 в 15:01)   письмо автору
 
   для: cheops   (24.02.2012 в 14:34)
 

напишите, как добавить нужный индекс в таблицу parts?

  Ответить  
 
 автор: cheops   (24.02.2012 в 15:13)   письмо автору
 
   для: fox2011   (24.02.2012 в 15:01)
 

Можно воспользоваться следующим запросом
ALTER TABLE `parts` ADD INDEX ( `man_id` )

  Ответить  
Rambler's Top100
вверх

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