URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 5451
[ Назад ]

Исходное сообщение
"скорость выполнения запроса"

Отправлено Ден , 25-Май-06 23:08 
Добрый день,

скорость выполнения запроса типа:
"select * from t1 where time<1148469082 and time>1148468120"
будет зависить от кол-ва записей в базе не попадающих в этот интервал?

Если да, то можно ли какнибуть иначе организвать базу, дабы снять эту зависимость?

PS
в таблице несколько миллионов записей.
тип таблицы InnoDB, если это имеет значение..


Содержание

Сообщения в этом обсуждении
"скорость выполнения запроса"
Отправлено ovax , 26-Май-06 03:33 
>Добрый день,
>
>скорость выполнения запроса типа:
>"select * from t1 where time<1148469082 and time>1148468120"
>будет зависить от кол-ва записей в базе не попадающих в этот интервал?
>
>
>Если да, то можно ли какнибуть иначе организвать базу, дабы снять эту
>зависимость?
>
>PS
>в таблице несколько миллионов записей.
>тип таблицы InnoDB, если это имеет значение..

Очевидно, есть смысл помимо юникс-тайм, также хранить дату в таблице отдельными полями в виде года, месяца, и , может быть, дня. И по этим полям провести индексацию.


"скорость выполнения запроса"
Отправлено Ден , 26-Май-06 07:34 

>
>Очевидно, есть смысл помимо юникс-тайм, также хранить дату в таблице отдельными полями
>в виде года, месяца, и , может быть, дня. И по
>этим полям провести индексацию.

Такие поля есть, но я их сделал и использовал исключительно для группировки.
Благодарю за совет )


"скорость выполнения запроса"
Отправлено Savva , 26-Май-06 12:24 
>
>>
>>Очевидно, есть смысл помимо юникс-тайм, также хранить дату в таблице отдельными полями
>>в виде года, месяца, и , может быть, дня. И по
>>этим полям провести индексацию.

Если там есть индексация + несколько миллионов записей, то помоему, будет весьма затруднительна вставка в таблицу :(

если так, то надо еще пересматривать структуру БД.
Возможно разбивать данные на отдельные таблицы (например по месяцам (таблица меньше - вставка быстрее))

а для SELECTа использовать VIEW (кажется 5й MySQL уже поддерживает)



"скорость выполнения запроса"
Отправлено Асен Тотин , 26-Май-06 18:33 
Привет,

1. Чем меньше полей в WHERE клаузе, тем быстрее. Так что не разбивайте дату на куски.

2. MySQL-у почти все равно будет ли дата в timestamp или в datetime. Я лично предпочитаю второе, легче на консоли работать.

3. Скорость запроса будеть несколько зависеть от общего количества записей, но если у вас иднекс по данному полю и если запрос типа "больше чего-то и меньше того-то", то количество записей не сыграет особой роли.

4. несколько миллионов записей - это маленькая таблица, перестраивать базу нет смысла. Ваш запрос должен быть отработан в любом случае не более, чем за секунду. Пример: на машине с P4/3GHz при собственной загрузке CPU другими процессами примерно на 50%, извлечение данных с таким правилом из таблицы с ок. 3 миллионами записей занимает 0.5-1.5 секунды.

WWell,