Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Всем здравствуйте. Делаю запрос, он объединяет в себе выборку из 3 таблиц
table1 - основная таблица, в которой хранятся все данные об объектах каталога
table2 - таблица со списком областей
table3 - таблица со списком городов
как видно, я в запросе сравниваю id области и id города с такими же полями в таблицах 2 и 3
$query = "SELECT SQL_CACHE SQL_CALC_FOUND_ROWS t1.id_pkv, t1.date_pkv, t1.time_pkv, t1.id_razdel, t1.id_rubpkv, t1.id_city, t1.street_pkv, t1.obpl_pkv, t1.zilpl_pkv, t1.citpl_pkv, t1.komn_pkv, t2.name_oblast, t3.name_city FROM table1 t1
LEFT JOIN table2 t2 ON t1.id_oblast=t2.id_oblast
LEFT JOIN table3 t3 ON t1.id_city=t3.id_city
WHERE t1.id_razdel=1 AND t1.id_rubpkv=2 AND t1.id_oblast=3 AND t1.id_city=4 $order LIMIT $offset, $perPageSearch";
Запрос работает, пока на больших объемах данных не проверял, но.. хотелось бы узнать, запрос написан нормально или можно его как то оптимизировать?
Понятно, что пока работает лучше не трогать, но я просто не очень силен в MySql, поэтому интересуюсь - вдруг я чтото изначально неправильно сделал.
Заранее спасибо!
Отредактированно rbwest (30.10.2011 22:07:03)
Неактивен
Если позволяет логика (т.е. для всякой строки точно есть записи в таблицах городов и областей) - сделайте простой JOIN, а не LEFT. Будет побыстрее.
Должны обязательно быть индексы на t1.id_oblast и t1.id_city.
В остальном вроде нормально.
Неактивен
Да, строки область и город есть обязательно, а как узнать индексные они или нет? в дампе базы для этих таблиц вот такая запись
для области
PRIMARY KEY (`id_oblast`)
для города
PRIMARY KEY (`id_city`)
Это и есть индексы?
Неактивен
LazY написал:
Если позволяет логика (т.е. для всякой строки точно есть записи в таблицах городов и областей) - сделайте простой JOIN, а не LEFT. Будет побыстрее.
Должны обязательно быть индексы на t1.id_oblast и t1.id_city.
В остальном вроде нормально.
А если исходить из текущей схемы (с LEFT JOIN'ами), то нужны индексы на t2.id_oblast, t3.id_city и составной индекс на комбинацию полей (id_razdel,id_rubpkv,id_oblast,id_city).
rbwest написал:
Да, строки область и город есть обязательно, а как узнать индексные они или нет? в дампе базы для этих таблиц вот такая запись
для области
PRIMARY KEY (`id_oblast`)
для города
PRIMARY KEY (`id_city`)
Это и есть индексы?
Да, первичный ключ (в отличии от вторичного) включает в себя индекс по полю. А вообще индексы на конкретные поля и комбинации полей можно посмотреть хотя бы с помощью
Отредактированно deadka (31.10.2011 14:13:50)
Неактивен
Огромное спасибо ответившим, разобрался!
Неактивен
Страниц: 1