2010-08-02 2 views
0

Все,Возможно ли оптимизировать этот SQL-запрос?

Я использую это как условие для моего оператора select.

WHERE RecDate >= '%s' GROUP BY DATE(RecDate), HOUR(RecDate), MINUTE(RecDate), 
SECOND(RecDate) - (Second(RecDate) \% %d) LIMIT %d 

В настоящее время этот запрос занимает слишком много времени. То, что я пытаюсь сделать здесь, - собрать X количество строк после определенной даты. Я также не хочу каждую строку, я хочу каждую N-ю строку, что, по моему мнению, для группы GROUP.

В основном у меня есть группа аналоговых сигналов, которые отбираются и помещаются в БД на 1 Гц (каждая строка.) Я не хочу отображать на графике около 4-8 часов данных за раз, но это не так «Имеет смысл вытащить все точки назад.

Я стараюсь как можно больше использовать базу данных. Есть ли способ заставить этот запрос работать быстрее?

С уважением, Кен

Вот создать отчет за моим столом.

DROP TABLE IF EXISTS `vdaq_6`.`readings`; 
CREATE TABLE `vdaq_6`.`readings` (
    `RigId` varchar(15) NOT NULL DEFAULT '', 
    `Location` varchar(45) NOT NULL DEFAULT '', 
    `RecDate` datetime NOT NULL DEFAULT '0001-01-01 00:00:00', 
    `0123` double NOT NULL DEFAULT '0', 
    `0124` double NOT NULL DEFAULT '0', 
    `0118` double NOT NULL DEFAULT '0', 
    `0114` double NOT NULL DEFAULT '0', 
    `0126` double NOT NULL DEFAULT '0', 
    `0121` double NOT NULL DEFAULT '0', 
    `0141` double NOT NULL DEFAULT '0', 
    `0137` double NOT NULL DEFAULT '0', 
    `1129` double NOT NULL DEFAULT '0', 
    `0130` double NOT NULL DEFAULT '0', 
    `0108` double NOT NULL DEFAULT '0', 
    `0113` double NOT NULL DEFAULT '0', 
    `0110` double NOT NULL DEFAULT '0', 
    `0116` double NOT NULL DEFAULT '0', 
    `0120` double unsigned NOT NULL DEFAULT '0', 
    `0112` double NOT NULL DEFAULT '0', 
    `0128` double NOT NULL DEFAULT '0', 
    `0423` double NOT NULL DEFAULT '0', 
    PRIMARY KEY (`RigId`,`Location`,`RecDate`), 
    KEY `Index_2` (`RecDate`), 
    KEY `replication` (`UpdateCd`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='v2;InnoDB free: 523264 kB'; 
+0

Примеры данных и ожидаемых выходных данных –

ответ

0

Группа по воле не получать каждую N-ую строку; похоже, что это означает суммирование или среднее количество всех N строк (где N, по-видимому, четный делитель 60).

Если вы действительно хотите каждую N-ю строку, это может быть намного быстрее; замените группу на порядок с помощью RecDate и добавьте где (второе (RecDate) \%% d) == 0.

Но, пожалуйста, покажите нам фактические поля.

Смежные вопросы