Как быстрее всего получить кол-во результатов (MySQL)?

12
N1k
На сайте с 11.02.2007
Offline
197
N1k
1625

Запросов много. Стоит такой код, но уже не справляется:

$result1= @mysql_query("SELECT * FROM table WHERE ...);
$result=@mysql_num_rows($result1);

Говорят что через SELECT COUNT(*), в 10 раз быстрее~. Нашел в таком духе:

$result1 = @mysql_query("SELECT COUNT(*) FROM table WHERE ...);
$result=@mysql_fetch_array($result1);

Но он не работает, вместо значения $result влезает "Array". :gm:

Я, наверное, где-то накосячил?...

[Удален]
#1

а теперь палю тему :) 10 летней давности :)

лучше всего для оптимизации (в большинстве случаев) хранить количество записей где-то в другом месте. изменять это значение при добавлении/удалении интересующих записей. но это уже тонкая оптимизация.

$result = @mysql_query("SELECT COUNT(*) FROM table WHERE ...);
$result=@mysql_fetch_array($result);
$count = $result[0];
N1k
На сайте с 11.02.2007
Offline
197
N1k
#2

MOP1, сенкс. Если бы не столкнулся с проблемами, боюсь и до этого не дошел бы. -(

А значением тут, как я понимаю, будет уже сам $count?

[Удален]
#3

точно так как вы говорите :)

вот дока: http://ua2.php.net/mysql_fetch_array

N
На сайте с 06.05.2007
Offline
419
#4

а что значит много запросов? много раз подряд выполняется один и тот же select с разными where ?

Кнопка вызова админа ()
N1k
На сайте с 11.02.2007
Offline
197
N1k
#5
netwind:
а что значит много запросов? много раз подряд выполняется один и тот же select с разными where ?

Да, так, 10 раз так.

N
На сайте с 06.05.2007
Offline
419
#6

ужос. почитайте про group by и сможете заменить это одним запросом

N1k
На сайте с 11.02.2007
Offline
197
N1k
#7

Попробую завтра...

Действительно идет подряд оч. много запросов с разными where. П.т.:

$result1 = @mysql_query("SELECT COUNT(*) FROM table WHERE (s1 >= 72 and s1 <= 89));
$result1=@mysql_fetch_array($result1);
$count1 = $result1[0];
$result2 = @mysql_query("SELECT COUNT(*) FROM table WHERE (s1 >= 90 and s1 <= 95));
$result2=@mysql_fetch_array($result2);
$count2 = $result2[0];

И т.д...

RU
На сайте с 08.12.2008
Offline
9
#8
N1k:
Запросов много. Стоит такой код, но уже не справляется:



Говорят что через SELECT COUNT(*), в 10 раз быстрее~. Нашел в таком духе:



Но он не работает, вместо значения $result влезает "Array". 😒
Я, наверное, где-то накосячил?...

я не понял.. Вам что надо получить? количество row в соответствии с условием или что?

если первое то:

$result = mysql_result( mysql_query( 'SELECT count(*) WHERE условия' ), 0 );

Real-Unior добавил 09.01.2009 в 06:38

MOP1:
а теперь палю тему :) 10 летней давности :)
лучше всего для оптимизации (в большинстве случаев) хранить количество записей где-то в другом месте. изменять это значение при добавлении/удалении интересующих записей. но это уже тонкая оптимизация.

а теперь палю темы count(*) считает по index, тоесть мускул сам кеширует количество записей :)

доступный способ для оплаты ваших услуг (http://www.smsdostup.ru/3137/) Дивная верстка за $10 (/ru/forum/324509)
[Удален]
#9

'SELECT count(*) будет работать медленее чем 'SELECT * так как count() будет считать все ключи а * обратится в примари, и сразу получит значение.

N
На сайте с 06.05.2007
Offline
419
#10

N1k, ну здесь не так очевидно. а эти границы можно пересчитать математически?

если серия запросов затрагивает весь диапазон, то будет выгодно одним запросом, иначе даже 10 мелких могут быть быстрее одного ( ну конечно если там есть индекс по s1).

запрос приблизительно такой

select sum( if(s1 >= 72 and s1 <= 89,1,0)) as s_72_89, sum(if (s1 >= 90 and s1 <= 95,1,0) as s_90_95, ..

надо проверять

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий