|
|
|
| Есть таблица, для хранения статей:
CREATE TABLE `articles` (
`id_article` int(11) NOT NULL auto_increment,
`name` tinytext,
`description` tinytext,
`html_title` tinytext,
`html_description` tinytext,
`html_keywords` tinytext,
`pos` int(11) default NULL,
`showhide` enum('show','hide') default 'hide',
`datetime` datetime default NULL,
`ann` enum('1','0') default '0',
`id_group` int(11) default NULL,
PRIMARY KEY (`id_article`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 COMMENT='Метаданные статей' AUTO_INCREMENT=85 ;
|
Назначения всех полей, я думаю понятно, кроме "ann". "ann" - это поле - флаг "Анонсировать статью на гл. станице сайта."
Подскажите какие поля проиндексировать.
У меня сортировка и/или выборка данных буедт производиться по этим полям:
`pos` int(11) default NULL,
`showhide` enum('show','hide') default 'hide',
`datetime` datetime default NULL,
`ann` enum('1','0') default '0',
`id_group` int(11) default NULL,
|
Но, получается что проиндексировать надо пол таблицы. Не лишку?
И как лучше проиндексировать? Все поля в один индекс, или для каждого поля свой индекс? | |
|
|
|
|
|
|
|
для: tAleks
(06.03.2007 в 10:54)
| | Как точно выглядят WHERE-условия? Индексировать лучше наиболее часто-используемые записи. showhide и ann лучше вообще не индексировать. | |
|
|
|
|
|
|
|
для: cheops
(06.03.2007 в 12:50)
| | один из запросов, обращающихся к этой таблице выглядит так:
$sql_art = "
SELECT
id_article,
name,
description,
DATE_FORMAT(datetime, '%d.%m.%y') AS date
FROM articles
WHERE showhide = 'show' AND ann = '1'
ORDER BY datetime DESC LIMIT 5";
|
А почему showhide и ann лучше вообще не индексировать? Они же используются в WHERE.
Или не надо индексировать, потому что они ENUM? | |
|
|
|
|
|
|
|
для: tAleks
(06.03.2007 в 16:12)
| | Да, потому, что ENUM и слишком мало значений - выигрыш в скорости может быть не большой, а индексы будут занимать место на диске (а чем больше места занимается, тем ниже скорость).
PS А почему к индексации прибегаете - скорость выполнения запроса низкая? | |
|
|
|
|
|
|
|
для: cheops
(06.03.2007 в 22:26)
| | >PS А почему к индексации прибегаете - скорость выполнения запроса низкая?
Не знаю, про скорость еще ничего. Сайт только на локальной машине, и статей еще не много. Но когда изучал MySQL по книжке "Самоучитель MySQL 5". Там написано, что обычно индексы создаются при создании таблицы. Вот я и решил сразу проиндексировать те поля, по которым буду делать выборку.
А что, что-то не так? Рано индексирую? | |
|
|
|
|
|
|
|
для: cheops
(06.03.2007 в 22:26)
| | Вот еще что подумал. А если в таблице буедт мало даных. Например таблица в которой храняться типы валют (руб. доллары. евры, и пр.). Их заведомо будет не больше 20.
Так вот, есть ли смысл вообще индексировать такие таблицы?
И после скольки строк в таблице, есть смысл ее индексирования? | |
|
|
|
|
|
|
|
для: tAleks
(07.03.2007 в 12:58)
| | двухядерный процессор, гектар оперативки, винт 10000 оборотов
у меня сейчас есть бд, в ней ~610,000 строк, написал скрипт который переклыдывает данные из одной таблицы 73.000 строк в две других при этом сравнивает данные по двум другим таблицам
индексов нет в mysql administrator (gui) среднее число запросов: 14, максимальное ~120
по ходу работы скрипта добавляю индексы в таблицы: среднее число запросов 300, максимальное 2000 | |
|
|
|
|
|
|
|
для: tAleks
(07.03.2007 в 12:58)
| | Нет мелкие таблицы имеет смысл индексировать, только если они участвуют в многотабличных запросах. | |
|
|
|
|
|
|
|
для: cheops
(07.03.2007 в 13:30)
| | А какие столбцы индексировать? Которые связки? | |
|
|
|