powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом в таблицу
15 сообщений из 15, страница 1 из 1
Помогите с запросом в таблицу
    #38434311
Таблица:
3 колонки
id (AUTO_INCREMENT)
_client_id
_date_off
Код: sql
1.
2.
3.
4.
5.
6.
CREATE TABLE IF NOT EXISTS `__pay` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `_client_id` int(11) NOT NULL,
  `_date_off` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;



Нужно получить последние записи с максимальным id для всех _client_id, в том случае если в этой записи _date_off меньше заданной даты
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38434334
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
SELECT * FROM _pay p
WHERE p._id =(SELECT MAX(id) FROM _pay p1 WHERE p1._client_id=p._client_id)
AND _date_off<:mydate
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38434409
Спасибо все работает
Код: sql
1.
2.
3.
SELECT * FROM __pay p 
WHERE p.id=(SELECT MAX(id) FROM __pay p1 WHERE p1._client_id=p._client_id) 
AND _date_off<='2013-10-20'


но
при обработке 8000 записей с 200 записями отвечающим условию запрос протекает очень медленно (CPU 3Ghz 1 Core)
209 всего, Запрос занял 82.4975 сек

Можно ли это как-то ускорить
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38434414
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
индекс по полю _client_id,
индекс по полю _date_off
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38434514
Спасибо очень помогло 0.2486 сек
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38434955
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуков,
это медленно, план запроса покажи, и CREATE
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38435502
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522436
bochkovНиколай Жуков,
это медленно, план запроса покажи, и CREATE

Да действительно база выросла до 11000 (за 2 с небольшим) и запрос в 200 результатов уже больше секунды

Но я честно не знаю что это (план запроса покажи)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE IF NOT EXISTS `_pay` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `client_id` int(11) NOT NULL,
  `tarif` varchar(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `summ` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `ostatok` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `off_date` date NOT NULL,
  `action` enum('pay','change','credit','pause','pauseon','pauseoff','creditmonth','credit3day') CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `update_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `admin_id` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `client_id` (`client_id`),
  KEY `off_date` (`off_date`),
  KEY `tarif` (`tarif`),
  KEY `action` (`action`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11351 ;
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522478
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай Жуков,

поставьте перед запросом слово:
EXPLAIN
и выдайте результат выполнения.
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522481
Сам запрос
Код: sql
1.
2.
3.
SELECT * FROM _pay p 
WHERE p.id=(SELECT MAX(id) FROM _pay p1 WHERE p1.client_id=p.client_id) 
AND off_date<='2014-01-01'
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522487
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522497
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай ЖуковСам запрос
Код: sql
1.
2.
3.
SELECT * FROM _pay p 
WHERE p.id=(SELECT MAX(id) FROM _pay p1 WHERE p1.client_id=p.client_id) 
AND off_date<='2014-01-01'



попробийте развернуть оглобли:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select p2.*
from
(
select 
max(p1.id) max_id 
from _pay p1
) z
straigth_join _pay p2 on z.max_id = p2.id
AND off_date<='2014-01-01'
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522515
MySQL вернула пустой результат
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522533
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Николай ЖуковMySQL вернула пустой результат


угу, забыл я групировку:

select p2.*
from
(
select
max(p1.id) max_id
from _pay p1
group by p1.client_id
) z
straigth_join _pay p2 on z.max_id = p2.id
AND off_date<='2014-01-01'
...
Рейтинг: 0 / 0
Помогите с запросом в таблицу
    #38522614
Да конечно разница в полтора периода (0.0295 сек) радует
Спасибо
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите с запросом в таблицу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]