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

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

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

Вы не зашли.

#1 28.07.2009 17:17:22

Magnataur
Участник
Зарегистрирован: 28.07.2009
Сообщений: 4

Запросы к большой таблице

Есть БД такого вида:

Код:

DROP TABLE IF EXISTS `user`;
DROP TABLE IF EXISTS `project`;
DROP TABLE IF EXISTS `site`;
DROP TABLE IF EXISTS `logdb`;

CREATE TABLE `project` ( 
  `id` SMALLINT(4) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(30) CHARACTER SET utf8 COLLATE utf8_bin
);

CREATE TABLE `user` (
  `id` SMALLINT(4) UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  `project_id` SMALLINT(4),
  `login` VARCHAR(30) NOT NULL UNIQUE,
  `first_name` VARCHAR(30),
  `second_name` VARCHAR(30),
  `middle_name` VARCHAR(30)
);

CREATE TABLE `site` (
  `id` INTEGER UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  `url` varchar(256) NOT NULL UNIQUE
);

CREATE TABLE `logdb` (
  `id` INTEGER UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
  `date` DATE NOT NULL,
  `time` TIME NOT NULL,
  `size` INTEGER UNSIGNED NOT NULL,
  `ip` INTEGER(9) UNSIGNED NOT NULL,
  `user_id` SMALLINT(4) UNSIGNED NOT NULL,
  `site_id` INTEGER UNSIGNED NOT NULL
);

Ежемесячно в таблицу logdb загружается от 15 до 20 миллионов строк. Работа с такой таблицей пока что неплохо учит медитации smile

Вот пример медитативного запроса:

Код:

SELECT sum(l.size), s.url, s.id AS sum
  FROM logdb AS l, site AS s
  WHERE l.user_id=100 AND MONTH(date)=1 AND s.id=l.site_id
  GROUP BY l.site_id

В индексах пока не силён, усиленно вникаю. Собственно вопрос: как можно оптимизировать запрос и какие индексы лучше создать для него ?

Неактивен

 

#2 28.07.2009 18:01:00

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

Re: Запросы к большой таблице

Ну, очевидно, нужен ключик на user_id. Если бы месяц писался отдельным полем,
то и на него нужно было бы этот ключик растянуть. В текущем варианте под MONTH()
оно никак не повлияет.

Возможно, имеет смысл бить табличку по месяцам (хотя бы PARTITIONING) — в таком
виде она у Вас вырастет очень быстро до неадминистрируемых размеров smile

Неактивен

 

#3 20.08.2009 12:20:57

Magnataur
Участник
Зарегистрирован: 28.07.2009
Сообщений: 4

Re: Запросы к большой таблице

Спасибо за ответ. Нашёл отличную статью по теме: http://dev.mysql.com/tech-resources/art … duler.html

Неактивен

 

Board footer

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