Выборка из базы без LIMIT - не будет ли тормозов при большой базе?

DanGien

Новичок
Выборка из базы без LIMIT - не будет ли тормозов при большой базе?

Задался вот таким вопросом.

Делаю, скажем, поиск по базе или вывожу просто товары, т.е.

$query = "SELECT * FROM tovary where name LIKE '%$searchtov%' OR opisan LIKE '%$searchtov%'";
$result = mysql_query ($query);

При этом на 1 странице вывожу только, скажем, 10 результатов. Но в запросе LIMIT не ставлю, т.к. для работы скрипта нужно знать, сколько ВСЕГО результатов SELECT в базе. Но, повторюсь, далее скрипт выводит только 10 записей (первых, вторых и т.д. на каждой странице).

Вопрос. Если вдруг ВСЕГО записей будет 10000 (это я на будущее), а выводиться будет все же 10, не станет ли тормозить скрипт? Не будет ли "хавать" слишком много ресурсов, шерстя по базе и учитывая ВСЕ 10000 записей товаров, даже если потом выводится только 10?
 

Oscar

Новичок
На вопрос - не будет ли тормозов уверенно ответить не могу, но склоняюсь к тому, что будут.

Что касается решения проблемы - могу предложить следующее:

Выбор 10-ти результатов:
SELECT * FROM tovary where name LIKE '%$searchtov%' OR opisan LIKE '%$searchtov%' LIMIT 10

Подсчёт колличества записей:
SELECT count(*) FROM tovary where name LIKE '%$searchtov%' OR opisan LIKE '%$searchtov%'
 

_RVK_

Новичок
DanGien
Для подсчета количество записей нужно использовать функцию COUNT(*), это ГОРАЗДО быстрее чем выборка всех записей и подсчет с помощью [m]mysql_num_rows[/m]. mysql_num_rows нужно использовать ТОЛЬКО тогда, когда ВСЕ данные, полученные при выборке тебе нужны в дальнейшем.
 

ForJest

- свежая кровь
DanGien
Твоё решение тормозить будет в любом случае на 10к записей.
Только если ты не будешь ставить LIMIT оно ещё будет жрать дополнительную память - на весь RECORD SET, который вернула муська.

читай
http://spectator.ru/technology/php/php_search
и материалы конференции :)
 

DanGien

Новичок
Спасибо всем ответившим!

Сделал так:

SELECT count(*) FROM tovary where name LIKE '%$searchtov%' OR opisan LIKE '%$searchtov%'
$result= mysql_query ($query);

$vot = mysql_fetch_array($result);
$i = $vot ['0'];

Вроде все работает верно.

читай
http://spectator.ru/technology/php/php_search
Хоть там и не на MySQL, но все равно нашел много полезного. Спасибо!:)
 
Сверху