PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
ZeiZ
Отправлено: 08 Июня, 2011 - 10:35:24
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
Добрый день.
есть таблица id| time| ip| client|
например по запросу:
Выдаёт 1800+ строк.
Мне не нужно тормозить базу с выдачей. Мне достаточно результат - число 1800+
как переделать запрос?
Спасибо
ZeiZ
Отправлено: 08 Июня, 2011 - 11:56:15
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
EuGen пишет:
Если нужна группировка, то добавьте и
но и получится что-то вроде
count(*)
10
11
21
30
10
10
56
.....
А мне нужна сумма всех строк count(*) (1856)
OrmaJever пишет: Извините раобрался Растерялся
????????(Отредактировано автором: 08 Июня, 2011 - 11:57:43)
EuGen
Отправлено: 08 Июня, 2011 - 21:13:58
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007
Откуда: Berlin
Помог: 707 раз(а)
Если нужно количество всех, то не ставьте группировку, то есть просто
EuGen пишет: SELECT COUNT(*)
FROM
stats
о чем я Вам и написал выше.
-----Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
ZeiZ
Отправлено: 21 Июня, 2011 - 12:33:09
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
Извините, что забросил тему.
Возвращаюсь.
Есть таблица статистики: stats (id pid time ip client wud).
Нужно подсчитать количество уникальных посетителей, т.е. где связка ip client уникальна.
сначала было так:
- 34сек.
Изменил на:
- 9сек.
Можно ли ещё как-то оптимизировать?
Спасибо
ZeiZ
Отправлено: 21 Июня, 2011 - 13:03:57
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
результат:
CODE (
htmlphp ):
скопировать код в буфер обмена
id - 1
select_type - SIMPLE
table - stats
type - ALL
possible_keys - NULL
key_len - NULL
ref - NULL
rows - 912654
Extra - Using temporary; Using filesort
SELECT FOUND_ROWS() добавил, чтобы показать, что мне не нужно всё, что выдаёт запрос, а только количество строк.
ZeiZ
Отправлено: 21 Июня, 2011 - 13:49:42
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
Создал индексы на ip и клиент, ничего не изменилось (explain тоже)
Что-то делаю не так.
Немного модифицировал запрос
- стало 7сек.
ZeiZ
Отправлено: 21 Июня, 2011 - 14:55:10
Частый гость
Покинул форум
Сообщений всего: 231
Дата рег-ции: Нояб. 2009
Откуда: Москва
Помог: 0 раз(а)
CODE (
SQL ):
скопировать код в буфер обмена
CREATE TABLE `stats` (
`id` int( 11) UNSIGNED NOT NULL AUTO_INCREMENT ,
`pid` int( 3) UNSIGNED NOT NULL ,
`time` int( 10) UNSIGNED NOT NULL ,
`ip` varchar( 15) NOT NULL ,
`client` varchar( 255) DEFAULT NULL ,
`wud` SET ( 'show' , 'referral' , 'click' ) NOT NULL ,
PRIMARY KEY ( `id` ) ,
KEY `ipclient` ( `ip` , `client` )
) ENGINE= InnoDB AUTO_INCREMENT = 972794 DEFAULT CHARSET= utf8
EuGen Спасибо. Используя двойной индекс запрос длится 1,4сек. Намного лучше, чем 34сек. вначале. Оптимизация в 24 раза. Ещё раз спасибо.
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB