|
|
|
| Есть сводная таблица masina , в которую заливается информация с других таблиц
$query = "SELECT mashina.*,
model.*,
yearpoduct*,
........
optika.*
FROM mashina, model,yearproduct, ...., optika WHERE
mashina.id_model=model.id_model AND
mashina.id_yearproduct=yearproduct.id_yearproduct AND
............ masina.id_optika=optika.id_optika";
|
Подскажите как можно оптимально оптимизировать запрос чтоб увеличить скорость обработки...( или может лучше чтоб в сводную таблицу вместо id с других таблиц вставлять значения????)
PS... Если в таблице какой нить id = 0(например id_optika) ... тогда эта строка не отображается... а при замене AND на OR ... запрос "зависает".
Заранее благодарен. | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(05.01.2008 в 21:15)
| | Вам нужно использовать не внутренние, а левосторонние внешние соединения.
SELECT mashina.*,
model.*,
yearpoduct.*,
optika.*
FROM mashina
LEFT JOIN model ON mashina.id_model=model.id_model
LEFT JOIN yearproduct ON mashina.id_yearproduct=yearproduct.id_yearproduct
LEFT JOIN optika ON masina.id_optika=optika.id_optika
|
Тогда основа (mashina) будет выводиться независимо от того, есть ли данные в сопутствующих таблицах.
Что до оптимизации - расставляйте индексы на поля ключей (id-ов)
Впрочем, по идее, для такого запроса будет достаточно первичных ключей, которые обычно поставлены вместе с auto_increment | |
|
|
|
|
|
|
|
для: Trianon
(05.01.2008 в 21:42)
| | Спасибо за помощь!!! ))
Хотел бы уточнить ... а насколько такой запрос "шустрый" ...
И на сколько увеличит производительность индексы полей ....
Ведь увеличится размер таблиц в несколько раз.
Спасибо еще раз!!! | |
|
|
|
|
|
|
|
для: dmtrfoxerr
(05.01.2008 в 23:24)
| | вот заодно и выясните.
Повторю. Именно для этого запроса (без поиска, фильтров и сортировок) никаких других индексов, кроме первичных ключей, не требуется. | |
|
|
|