[MySQL] Дизайн большой таблицы + настройка сервера
От: Mamut Швеция http://dmitriid.com
Дата: 24.12.08 13:34
Оценка:
Есть тупая до ужаса таблица
CREATE TABLE `price_detail` (
  `accomodation` int(11) NOT NULL,
  `date` datetime NOT NULL,
  `price` int(11) NOT NULL,
  `room_id` int(11) NOT NULL,
  KEY `idx_price_price` (`price`),
  KEY `idx_price_date` (`date`),
  KEY `idx_price_accomodation` (`accomodation`)
)


Предположим, что у нас в ту таблицу закладывается 3 миллиона строк на день. То есть нормально, чтобы уже сегодня нам пришдется работать с 3*365=1095 миллионов записей на будущий год. Причем в базе данных это — единственная таблица с таким количеством записей.

К таблице будут приходить простейшие запросы типа
SELECT 
  `price`
FROM
  `price_detail` 
WHERE
  `accomodation`=1
  AND
  `date` BETWEEN '2008-01-01 12:00:00.000' AND '2008-01-15 12:00:00.000'


80% запросов охватывают период до двух недель.

Изначально наша идея была разбить таблицу на partitions понедельно. Разбили. Приведеный запрос отрабатывает за время от 20 секунд (MacBook Pro, 2 GB RAM, настройки mysql сервера почти не менялись). А нужно — менее секунды

Собственно вопрос А что делать-то

1. Может лучше использовать merge table?
2. Поможет ли cover index по колонкам (date, accomodation, price) (или в другом порядке)
3. Что подкрутить в настройках?

В общем, на РСДН уповаю


dmitriid.comGitHubLinkedIn
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.