







|
MySQL.RU - Webboard
Вернуться
Оптимизация запросов в MySQL - проблема (Александр) 29/11/2004 - 12:07:37
Re: Оптимизация запросов в MySQL - проблема (Валентин) 29/11/2004 - 12:35:51
Re: Оптимизация запросов в MySQL - проблема (Александр) 29/11/2004 - 12:51:19
Re: Оптимизация запросов в MySQL - проблема (Валентин) 29/11/2004 - 12:59:13
Re: Оптимизация запросов в MySQL - проблема (walrus) 29/11/2004 - 13:15:46
Re: Разобрался! (Александр) 29/11/2004 - 15:37:29
From: Александр - 29/11/2004 - 12:07:37
Subject:Оптимизация запросов в MySQL - проблема
-----------------
Скажем так: это система управления ссылками. На самом деле это не так, поэтому к абстрактности названий полей просьба не придираться :)
CREATE TABLE mySQLTable
(
id MEDIUMINT(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
linkname CHAR(50) NOT NULL,
link_att1 SMALLINT(5) UNSIGNED NOT NULL DEFAULT 11,
link_att2 TINYINT UNSIGNED NOT NULL DEFAULT 0,
last_datecheck DATETIME NOT NULL,
last_success_datecheck DATETIME NOT NULL,
num_of_fail_checks SMALLINT NOT NULL DEFAULT 0,
is_under_checking INT NOT NULL DEFAULT 0,
INDEX (last_datecheck),
INDEX (last_success_datecheck),
INDEX (is_under_checking),
UNIQUE (linkname),
INDEX (link_att1),
INDEX (link_att2)
);
Размер базы: 300 000 записей.
Должны выполняться следующие запросы:
Выбираем самую старую ссылку для того, чтобы ее проверить:
Select * from mySQLTable WHERE ((is_under_checking=0) and (last_success_datecheck < '2004-10-01')) ORDER BY last_datecheck ASC LIMIT 1;
выбираем самую старую ссылку, с доп. условиями:
Select * from mySQLTable WHERE ((is_under_checking=0) and (link_att1=5) and (link_att2>15) and (last_datecheck <= '2004-11-20') and (last_success_datecheck < '2004-10-20')) ORDER BY last_datecheck ASC LIMIT 1;
Select * from mySQLTable WHERE ((is_under_checking=0) and (last_success_datecheck BETWEEN '2003' and '2004')) ORDER BY last_datecheck ASC LIMIT 1;
Вопрос:
Какие нужно сделать индексы, чтобы эти запросы выполнялись быстро на базе в 300 000 записей?
Пробовал EXPLAIN. Если в запросе либо только where, либо только order by - нет проблем. Если в where - константы (link_att1=5) + order by - тоже в общем-то не проблема.
Но как только идет beetwen или >, < - ничего не получается, "filesort"
База постоянно перепроверяется, в нее добавляются (и в ней обновляются) ссылки. Поэтому отсортировать один раз по last_datecheck не получится.
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
18750
|
|