SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 29.04.2010 18:09:00

humbert
Участник
Зарегистрирован: 29.04.2010
Сообщений: 13

Помогите правильно расставить index, для ускорения запроса.

Неуч-самоучка я.
Есть такая таблица:

Код:

CREATE TABLE films (
  id_film int(11) NOT NULL auto_increment,
  name_film varchar(255) NOT NULL,
  eng_film varchar(255) NOT NULL,
  duration_film int(11) NOT NULL,
  opis_film text,
  reiting_imdb float NOT NULL,
  year_film int(4) NOT NULL,
  trailer_url varchar(255) NOT NULL,
  slug_film varchar(255) NOT NULL,
  code_char_film int(11) default NULL,
  description_film text,
  door_title varchar(255) NOT NULL,
  door_keyword varchar(255) NOT NULL,
  door_description text,
  door_opis text,
  add_site int(1) NOT NULL,
  view_film int(11) NOT NULL,
  title_film varchar(255) NOT NULL,
  main_img varchar(255) NOT NULL,
  trailer_width int(11) NOT NULL,
  trailer_height int(11) NOT NULL,
  date_public int(11) NOT NULL,
  reiting_kinopoisk float NOT NULL,
  reiting_site float NOT NULL,
  keyword_film varchar(255) NOT NULL,
  peremen_film text NOT NULL,
  PRIMARY KEY  (id_film),
  UNIQUE KEY name_film (name_film,duration_film,year_film),
  UNIQUE KEY slug_film (slug_film,code_char_film),

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

В таблице 16.000 записей, вес 25 Мб

Запрос такого вида:

Код:

SELECT Distinct peremen_film, keyword_film, name_film, f.id_film, year_film, opis_film, door_keyword, door_opis, 
door_description, door_title, duration_film, reiting_kinopoisk, reiting_imdb, reiting_site, eng_film, slug_film, code_char_film, 
main_img, view_film 
FROM films f where date_public<=1272549307 
order by name_film Limit 0,18

Выполняется 0.47 секунд, при удалении условий поиска, время выполнения скрипта - 0.01 секунды

Как правильно расставить индексы, чтобы выполнялись нормально запросы? Или разбивать таблицу на несколько?

Отредактированно humbert (29.04.2010 18:14:12)

Неактивен

 

#2 29.04.2010 21:59:41

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

Re: Помогите правильно расставить index, для ускорения запроса.

Ну, для конкретного запроса максимум, что можно сделать — добавить индекс
на date_public. Но сортировать все равно будет в памяти. И то, скорее всего,
<= выберет больше половины таблицы, а, значит, индекс будет неэффективен.

После этого только выбирать id_film, сортировать в памяти, выбирать 18 записей,
а потом уже присоединять остальные данные.

Неактивен

 

#3 29.04.2010 22:05:56

humbert
Участник
Зарегистрирован: 29.04.2010
Сообщений: 13

Re: Помогите правильно расставить index, для ускорения запроса.

Понял принцип. Спасибо

Неактивен

 

Board footer

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