Forum Webscript.Ru

Общие => Базы данных => Тема начата: Tryapkonator от 21 Июня 2005, 12:45:58

Название: Индексы таблицы
Отправлено: Tryapkonator от 21 Июня 2005, 12:45:58
Есть таблица новостей. Записей примерно 10 000, в день прибовляется порядка 30-50 записей. Неправильно индексил таблицу и сейчас сижу правлю, сталкнулся с проблемкой. Есть 2 независимых поля, дата (date, тип данных DATE) и латинское имя (lname, тип данных VARCHAR) новости (для ЧПУ). Так же есть куча смежных таблиц типа рейтинга и комментариев, которые соеденяются с таблицей новостей по ключу lname. Новости отображаются за конкретное число. Внимание вопрос =)))
Какой индекс правильнее кластеризовать? С одной стороны Кластеризация даты (индекс будет разряженым) поможет отображать список новостей на странице, но с другой стороны если кластеризовать латинское имя, это позволит более быстро соединять новость с комментами и рейтингом при отображении конкретной новости. Вот сижу и думаю, вообще я больше скланяюсь к первичной индексации даты, но вдруг я не прав =) Может кто сталкивался или есть какие мысли по этому поводу.
Название: Индексы таблицы
Отправлено: Меняздесьдавнонет от 21 Июня 2005, 14:00:39
а что мешает попробовать?
Название: Индексы таблицы
Отправлено: sarutobi от 21 Июня 2005, 20:40:54
Хмм... Если я правильно помню теорию БД то кластеризуют только Primary Key, одно из обязательных свойств которого - уникальность для любой строки таблицы. Date под это определение подходит с натягом, т.к есть ненулевая вероятность совпадения дат.
В твоем случае я бы попробовал создать сложный индекс date+lname.
Название: Индексы таблицы
Отправлено: Tryapkonator от 22 Июня 2005, 10:25:32
Да, намудрил, теорию я плохо помню =( если делать составной индекс по ключам date+lname, то точечные запросы по lname будут выполняться достаточно медленно. Ладно, попробую воспользоваться драгоценным советом   RomikChef`а, через пару дней скину стату сюда...
Название: Индексы таблицы
Отправлено: commander от 22 Июня 2005, 12:46:49
sarutobi
Цитировать
Если я правильно помню теорию БД

не правильно помнишь!
Tryapkonator
индекс вешать на date
Название: Индексы таблицы
Отправлено: Tryapkonator от 22 Июня 2005, 12:59:57
commander
Речь идет о кластеризованном, т.е. первичном индексе, MySQL ругается на дубли. Даты у многих новостей совпадают, но я почему то был уверен что не смотря на дубли можно кластеризовать индекс даты. Это MySQL не умеет, или я опять не то делаю?
Название: Индексы таблицы
Отправлено: commander от 22 Июня 2005, 13:02:22
зачем тебе первичный индекс?
Название: Индексы таблицы
Отправлено: Tryapkonator от 22 Июня 2005, 13:05:33
чтобы индексы новостей с одинаковыми датами лежали совсем рядом на диске, чтобы не нужно было листать все индексы по дате и выбирать нужную
Название: Индексы таблицы
Отправлено: commander от 22 Июня 2005, 16:12:27
Tryapkonator
полезно наверное будет почитать... ;)
http://www.mysql.ru/docs/man/MySQL_indexes.html
Название: Индексы таблицы
Отправлено: sarutobi от 22 Июня 2005, 16:18:09
commander
Вообще то правильно помню.... Кластеризовать можно тока первичный индекс - а он по определению уникальный.
Насчет ссылки что ты привел - там действительно много полезного про индексы вообще и в MySQL в частности.
Но советую почитать про кластерный индекс (http://www.intuit.ru/department/database/sql/3/3.html), а потом уже думать как помочь человеку.
Название: Индексы таблицы
Отправлено: commander от 22 Июня 2005, 16:22:17
sarutobi
где вы в MySQL разглядели кластерные индексы?
Название: Индексы таблицы
Отправлено: Tryapkonator от 22 Июня 2005, 16:49:45
commander
Неужели не кластеризуются? Тогда зачем приписка PRIMARY =( Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment. Хотя с другой стороны опять же нужны то точечные запросы на дату. Но думаю это будет быстрее. Попробую сегодня, ближе к утру, а то трафика ща много на сервере. А вообще помойму проще выделить темповую таблицу под новости за последний месяц...
Название: Индексы таблицы
Отправлено: commander от 22 Июня 2005, 16:56:46
Tryapkonator
Цитировать
Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment.

а ещё круче будет сходники MySQL заточить под свою задачу! ;)
Чем тебя и устраивает повесить обычный индекс на поле date?
Кстати расскажи ка что у тебя за БД...
Название: Индексы таблицы
Отправлено: sarutobi от 22 Июня 2005, 19:59:16
commander
Ткните пожаплуйста пальцем, где в вопросе стоит слово MySQL?
:) Мне оно не попалось вплоть до вашего сообщения.
Название: Индексы таблицы
Отправлено: Tryapkonator от 22 Июня 2005, 20:02:59
sarutobi
нет нет, я писал про MySQL, погляди мои посты.
commander
Скинул в личку инфу
Название: Индексы таблицы
Отправлено: commander от 23 Июня 2005, 12:35:55
sarutobi
какие ещё базы данных вы знаете помимо MSSQL в которых имеються кластерные индексы?
P.S. к тому же я уже привык что по умолчанию тут обсуждаеться MySQL...
Название: Индексы таблицы
Отправлено: fidget от 28 Июня 2005, 13:38:48
Цитировать
commander:
где вы в MySQL разглядели кластерные индексы?

в InnoDB есть кластерный индекс.