SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 05.07.2011 11:23:52

Artemprodigy
Участник
Зарегистрирован: 05.07.2011
Сообщений: 2

Как ускорить этот запрос?

Есть таблица в которой несколько млн. записей. В моём запросе нужно выбрать запись с выбранным серийным номером и IP последнюю запись, которая выбирается по макс индексу. Вот 2 варианта, по времени они практически одинаковы, а надо ещё быстрее...

SELECT smt.Data, smt.Time, smt.Topicality, smt.Temperature FROM smt WHERE (smt.Index = (select MAX(smt.Index) from smt where smt.SNumber='000002B5C588' AND smt.IP = '10.0.1.72'));

SELECT smt.Data, smt.Time, smt.Topicality, smt.Temperature FROM smt WHERE smt.SNumber='000002B5C588' AND smt.IP = '10.0.1.72' order BY smt.Index desc Limit 1

CREATE TABLE `smt` (
`IP` CHAR(15) NOT NULL DEFAULT '0.0.0.0',
`Data` DATE NOT NULL DEFAULT '2011-01-31',
`Time` TIME NOT NULL DEFAULT '00:00:00',
`SNumber` CHAR(12) NOT NULL DEFAULT '000000000000',
`Temperature` CHAR(8) NOT NULL DEFAULT '-000.000',
`Period` CHAR(5) NOT NULL DEFAULT '12345',
`Topicality` CHAR(1) NOT NULL DEFAULT '0',
`Repetition` CHAR(2) NOT NULL DEFAULT '0',
`W_Data` DATE NULL DEFAULT '2011-06-07',
`W_Time` TIME NULL DEFAULT '00:00:00',
`Index` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`Index`),
INDEX `SNumber` (`SNumber`),
INDEX `IP` (`IP`),
INDEX `Data` (`Data`, `Time`),
INDEX `W_Data_W_Time` (`W_Data`, `W_Time`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=6629160


Для первого:

|| *id* || *select_type* || *table* || *type* || *possible_keys* || *key* || *key_len* || *ref* || *rows* || *Extra* ||
|| 1 || SIMPLE || smt || index_merge || SNumber,IP || SNumber,IP || 36,45 || _NULL_ || 170152 || Using intersect(SNumber,IP); Using where; Using filesort ||


Для второго:


|| *id* || *select_type* || *table* || *type* || *possible_keys* || *key* || *key_len* || *ref* || *rows* || *Extra* ||
|| 1 || SIMPLE || smt || index_merge || SNumber,IP || SNumber,IP || 36,45 || _NULL_ || 175190 || Using intersect(SNumber,IP); Using where; Using filesort ||

Неактивен

 

#2 05.07.2011 14:37:40

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Как ускорить этот запрос?

Мне второй запрос нравится больше wink

Ключик добавьте на (SNumber, IP, Index).

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson