SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 01.02.2011 10:44:25

German
Участник
Зарегистрирован: 01.02.2011
Сообщений: 1

Partitions на поле в формате datetime, а выборка с использованием date()

Здравствуйте.

У меня есть таблица в которой 10 миллионов записей. Есть три поля
ID int(11) NOT NULL
OPEN_TIME datetime NOT NULL
CLOSE_TIME datetime NOT NULL

Помимо этого я создал индекс на два поля.
Indexes         Columns                 Index_Type
PRIMARY        ID, OPEN_TIME       Unique

После чего создал PARTITIONS


ALTER TABLE test_table
PARTITION BY RANGE( TO_DAYS(OPEN_TIME) ) (
PARTITION test_table_y2004m1 VALUES LESS THAN( TO_DAYS('2004-01-01') ),
****
PARTITION test_table_y2012m12 VALUES LESS THAN( TO_DAYS('2012-12-01') )
);

Партишин успешно создался.
Теперь при выборке данных

SELECT * FROM test_table WHERE OPEN_TIME BETWEEN  '2011-01-20  00:00:00' AND '2011-01-20  23:59:59'
0.094 секунды
а раньше
SELECT * FROM test_table WHERE DATE(OPEN_TIME) =  '2011-01-20'
34.383 секунды

Партишины работают только в том случае, если я делаю выборку по дате в формате datetime.

А у меня все оригинальные запросы выглядят вот как:
WHERE (DATE(`OPEN_TIME`) = '2011-02-01' AND DATE(`CLOSE_TIME`) = '2011-02-01')

и вот так
WHERE (OPEN_TIME` BETWEEN '2011-01-01' AND '2011-01-02') AND (`CLOSE_TIME` BETWEEN '2011-01-01' AND '2011-01-02')

Можно ли создать PARTITIONS так, чтобы можно было делать выборку указываю дату в запросе в формате date?
То есть вот так:
WHERE (DATE(`OPEN_TIME`) = '2011-02-01' AND DATE(`CLOSE_TIME`) = '2011-02-01')

Неактивен

 

#2 01.02.2011 23:47:44

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

Re: Partitions на поле в формате datetime, а выборка с использованием date()

Разделы создаются не по запросам, а по данным. Никто не мешает Вам
над разбитой таблицей задать Ваш последний запрос. Но работать он,
разумеется, будет медленно, потому что нельзя наперед угадать, в какой
раздел попадет результат работы функции над полем, поэтому приходится
перебирать все разделы.

Кстати, Ваша задачка решается индексом проще, кажется.

Неактивен

 

Board footer

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