2015-12-09 4 views
-1

У меня есть таблица размером не менее 5 ГБ и будет составлять 10 ГБ за пару лет. Одним из столбцов является поле даты, которое используется во многих запросах. Его можно использовать как Date, Year, Yearmonth и Month для фильтрации и группировки на основе пользовательской настройки в интерфейсе.MySQL Дата Расчетные индексы

WHERE yearmonth >= '201504' AND yearmonth <= '201506' 
WHERE year > 2014 
GROUP BY year, month ORDER BY year, month 
SELECT MONTH(date) 

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

+0

шоу схемы и примеры данных – Drew

+0

CREATE TABLE монитор ( 'country' символ (3), ' date' дата , 'year' SMALLINT (4), ' tvprogramfromtime' время, 'tvprogramtotime' время, ' adstarttime' время, 'timesegment' Int (1), ' bookingagent' INT (10), 'distributor' int (8), 'sector' int (3), 'category' int (3), ' product' int (10), 'brand' int (8), ' subbrand' int (8), ) ENGINE = MyISAM DEFAULT CHARSET = utf8; –

+0

ALTER TABLE monitor ADD KEY 'country' (' country'), ADD KEY 'date' (' date'), ADD KEY 'year' (' year'), ADD KEY 'category' (' category'), ADD KEY 'brand' (' brand'), ADD KEY 'media' (' media'), ADD KEY 'subbrand' (' subbrand'), ADD KEY 'product' (' product'), ADD KEY 'sector' (' sector') –

ответ

0

Оказывается, MySQL не может индексировать в вычисленном поле.

Я получил идею от FoxPro посредством чего я мог бы сделать это

INDEX ON MONTH(date) TAG month 
INDEX ON YEAR(date) TAG year 

Так, чтобы решить эту проблему в MySQL, я должен перевести выбранные даты пользователя критерии фильтрации в формулы на поле даты, которые индексируются.

1

Mysql 5.7 сгенерировал есть столбцы, и они могут быть виртуальными, но индексированных по:

ALTER TABLE yourtable ADD COLUMN date_month GENERATED ALWAYS AS MONTH(date) VIRTUAL; 
ALTER TABLE yourtable ADD INDEX 'index_on_month' (date_month ASC); 
+0

Спасибо за ваш ответ. Однако на серверах мы имеем версии 5.0 и 5.6 и не можем их изменить в ближайшее время. –

+0

https://www.percona.com/blog/2015/04/29/generated-virtual-columns-in-mysql-5-7-labs/ –

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