SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.04.2011 08:17:34

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Помогите разобраться с оптимизацией

Приветствую всех!

Есть табличка

CREATE TABLE `file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `basename` varchar(255) NOT NULL DEFAULT '0',
  `timeout` int(2) NOT NULL DEFAULT '2',
  `lastsend` datetime DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id`),
  KEY `lastsend` (`lastsend`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 PACK_KEYS=1;

Есть запрос:

SELECT * FROM `file` WHERE  `file`.`lastsend` > DATE_ADD(NOW(), INTERVAL (-`file`.`timeout`*60) SECOND ) 

id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra
1     SIMPLE              file     ALL     NULL     NULL     NULL     NULL     7449     Using where

7449     - столько всего записей в таблице.
Теперь вопросы:
подобный запрос (с вычисляемым значением) вообще не будет использовать индексы?
Как можно изменить чтобы задействовать индексы? Вернее как ускорить выполнение.

Отредактированно GRoM (10.04.2011 08:52:58)

Неактивен

 

#2 11.04.2011 00:34:25

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

Re: Помогите разобраться с оптимизацией

1. Нет, никак. Если Вы пишете, что нужно что-то вычислить для каждой строки,
не нужно удивляться, что MySQL что-то вычисляет для каждой строки wink

2. Попробуйте добавить поле nextsend, ключик по нему и искать
WHERE nextsend > NOW();

Неактивен

 

#3 11.04.2011 18:10:06

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Помогите разобраться с оптимизацией

Я и не удивляюсь smile
А вот со вспомогательным полем - это очень хорошо! (я вот не додумался и ради этого вопрос задавал)
Так и сделаю.
Спасибо!

Неактивен

 

Board footer

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