|
|
|
| Всегда ли стоит доверять оптимизатору, или возможны случаи, когда выгоднее отсоединить от запроса одну таблицу и свести задачу к серии запросов?
Например:
$rez = $sql -> query("SELECT t1.num FROM t1, t2, t3 where t1.id = t2.t1_id and t2.id = t3.t2_id and t3.val = 1");
|
Если t3 ну слишком большая, то возможно выгоднее сделать так:
$temp = $sql -> query("SELECT * FROM t3 where t3.val = 1");
foreach($temp as $t3)
$rez[] = $sql -> query("SELECT t1.num FROM t1, t2 where t1.id = t2.t1_id and t2.id = {$t3['id']}");
|
Если, конечно такое случается, то хотелось бы определить критерий, по которому можно определить ситуацию, когда следует прибегать к разбиению единого запроса... | |
|
|
|
|
|
|
|
для: freeneutron
(09.02.2009 в 08:35)
| | Запросы, мягко говоря, отличаются.
Второй фрагмент "подклеивает " таблиц t3 по первичному ключу. Первый - по чужому.
Если таблица t3 - огромна, то помимо изрядного (и совершенно неоправданного - на все поля) расхода памяти, огромным будет общее число запросов.
А так, первый запрос честно вытаскивает все строки таблиц 1 и 2 по ключам...
Если на t3.val индекс есть, то третью - по индексу.
И где же Ваша оптимизация? | |
|
|
|