|
|
|
| Имеются таблицы:
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? | |
|
|
|
|
|
|
|
для: fox2011
(23.02.2012 в 12:24)
| | >Правильно ли я написал запрос?
Зависит от того, что хотите получить. Если запрос выдает то, что вам нужно, как минимум он работает правильно. | |
|
|
|
|
|
|
|
для: cheops
(23.02.2012 в 12:44)
| | А с точки зрения оптимизации?..
Можно ли его как-то минимизировать? | |
|
|
|
|
|
|
|
для: fox2011
(24.02.2012 в 11:36)
| | Запрос, пожалуй, уже никак не оптимизируешь. Можно добавить индекс в таблицу parts на поле man_id. | |
|
|
|
|
|
|
|
для: cheops
(24.02.2012 в 12:45)
| | объясните, а зачем добавлять индекс в таблицу parts? | |
|
|
|
|
|
|
|
для: fox2011
(24.02.2012 в 14:26)
| | Индексы поддерживаются в отсортированном состоянии (их можно не перебирать, а вычислить место, где искать данные), поэтому если запросу удается их задействовать индекс и избежать перебора данных таблицы запись за записью - запрос выполняется сильно быстрее. | |
|
|
|
|
|
|
|
для: cheops
(24.02.2012 в 14:34)
| | напишите, как добавить нужный индекс в таблицу parts? | |
|
|
|
|
|
|
|
для: fox2011
(24.02.2012 в 15:01)
| | Можно воспользоваться следующим запросом
ALTER TABLE `parts` ADD INDEX ( `man_id` )
|
| |
|
|
|