|
|
|
| Вообщем сколько я не читал мануала по мускулу, всё равно толком непонимаю. Пришел за помощью. Вот к примеру есть запрос:
SELECT news_id FROM news WHERE news_active='1' and news_open='1' and news_main='1' and news_datestamp < now() ORDER BY news_dateorder DESC limit 0, 15
|
Не могли бы пояснить мне, на какие столбцы здесь надо ставить индексы и почему? | |
|
|
|
|
|
|
|
для: JIEXA
(04.08.2006 в 02:27)
| | Приведите структуру таблицы, если не сложно? | |
|
|
|
|
|
|
|
для: cheops
(04.08.2006 в 12:29)
| |
CREATE TABLE 'news' (
'news_id' int(9) unsigned NOT NULL auto_increment,
'news_cat' smallint(5) NOT NULL default '0',
'news_subject' varchar(80) NOT NULL default '',
'news_text' longtext NOT NULL,
'news_breaks' enum('0','1') NOT NULL default '0',
'news_author' varchar(30) NOT NULL default '',
'news_datestamp' datetime NOT NULL default '0000-00-00 00:00:00',
'news_dateorder' datetime NOT NULL default '0000-00-00 00:00:00',
'news_reads' int(12) unsigned NOT NULL default '0',
'news_comment' smallint(10) unsigned NOT NULL default '0',
'news_active' enum('0','1') NOT NULL default '1',
'news_open' enum('0','1') NOT NULL default '1',
'news_main' enum('0','1') NOT NULL default '1',
'news_vote' enum('0','1') NOT NULL default '0',
PRIMARY KEY ('news_id'),
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
|
| |
|
|
|
|
|
|
|
для: JIEXA
(04.08.2006 в 13:46)
| | А запросы только такие? В этом случае нужно организовать один индекс по трём столбцам news_active, news_open и news_main. | |
|
|
|
|
|
|
|
для: cheops
(04.08.2006 в 14:58)
| | А инедкс для news_datestamp и news_dateorder нинадо? | |
|
|
|
|
|
|
|
для: JIEXA
(04.08.2006 в 16:23)
| | Можно для news_dateorder отдельный индекс создать. | |
|
|
|
|
|
|
|
для: cheops
(04.08.2006 в 22:11)
| | Спасибо, тоесть индексы надо создавать для полей, которые стоят в WHERE также для полей по которым идет сортировка?
P.S. Надо перечитать материал про индексы в вашей книге... А то я читал что-то, но всё равно не допер :( | |
|
|
|
|
|
|
|
для: cheops
(04.08.2006 в 22:11)
| | Хм, сделал один индекс для трех полей news_open, news_main, news_active и отдельный для news_dateorder. И время выполнения запроса увеличилось в три раза. Убрал.. Оставил только news_dateorder и время генерации уменьшилось в 2 раза, чем было до указания каких-либо индексов. Но почему? Почему индекс по трем полям (news_open, news_main, news_active) замедляет время выполнения запроса? Ведь должно быть наоборот | |
|
|
|
|
|
|
|
для: JIEXA
(04.08.2006 в 23:56)
| | Объём таблиц большой? Если да, это вполне вероятно. Часто ли выполняется запрос? | |
|
|
|
|
|
|
|
для: cheops
(05.08.2006 в 10:30)
| | Примерно 15.000 записисей, запрос выполняется порядко 50 раз в минуту как минимум | |
|
|
|
|
|
|
|
для: JIEXA
(05.08.2006 в 10:49)
| | Хм... странно, таблица вроде не большая, а частота приличная, если бы индекс использовался бы - он бы 100% был бы в кэше индексов. | |
|
|
|