Forum Webscript.Ru
Общие => Базы данных => Тема начата: Tryapkonator от 21 Июня 2005, 12:45:58
-
Есть таблица новостей. Записей примерно 10 000, в день прибовляется порядка 30-50 записей. Неправильно индексил таблицу и сейчас сижу правлю, сталкнулся с проблемкой. Есть 2 независимых поля, дата (date, тип данных DATE) и латинское имя (lname, тип данных VARCHAR) новости (для ЧПУ). Так же есть куча смежных таблиц типа рейтинга и комментариев, которые соеденяются с таблицей новостей по ключу lname. Новости отображаются за конкретное число. Внимание вопрос =)))
Какой индекс правильнее кластеризовать? С одной стороны Кластеризация даты (индекс будет разряженым) поможет отображать список новостей на странице, но с другой стороны если кластеризовать латинское имя, это позволит более быстро соединять новость с комментами и рейтингом при отображении конкретной новости. Вот сижу и думаю, вообще я больше скланяюсь к первичной индексации даты, но вдруг я не прав =) Может кто сталкивался или есть какие мысли по этому поводу.
-
а что мешает попробовать?
-
Хмм... Если я правильно помню теорию БД то кластеризуют только Primary Key, одно из обязательных свойств которого - уникальность для любой строки таблицы. Date под это определение подходит с натягом, т.к есть ненулевая вероятность совпадения дат.
В твоем случае я бы попробовал создать сложный индекс date+lname.
-
Да, намудрил, теорию я плохо помню =( если делать составной индекс по ключам date+lname, то точечные запросы по lname будут выполняться достаточно медленно. Ладно, попробую воспользоваться драгоценным советом RomikChef`а, через пару дней скину стату сюда...
-
sarutobi
Если я правильно помню теорию БД
не правильно помнишь!
Tryapkonator
индекс вешать на date
-
commander
Речь идет о кластеризованном, т.е. первичном индексе, MySQL ругается на дубли. Даты у многих новостей совпадают, но я почему то был уверен что не смотря на дубли можно кластеризовать индекс даты. Это MySQL не умеет, или я опять не то делаю?
-
зачем тебе первичный индекс?
-
чтобы индексы новостей с одинаковыми датами лежали совсем рядом на диске, чтобы не нужно было листать все индексы по дате и выбирать нужную
-
Tryapkonator
полезно наверное будет почитать... ;)
http://www.mysql.ru/docs/man/MySQL_indexes.html
-
commander
Вообще то правильно помню.... Кластеризовать можно тока первичный индекс - а он по определению уникальный.
Насчет ссылки что ты привел - там действительно много полезного про индексы вообще и в MySQL в частности.
Но советую почитать про кластерный индекс (http://www.intuit.ru/department/database/sql/3/3.html), а потом уже думать как помочь человеку.
-
sarutobi
где вы в MySQL разглядели кластерные индексы?
-
commander
Неужели не кластеризуются? Тогда зачем приписка PRIMARY =( Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment. Хотя с другой стороны опять же нужны то точечные запросы на дату. Но думаю это будет быстрее. Попробую сегодня, ближе к утру, а то трафика ща много на сервере. А вообще помойму проще выделить темповую таблицу под новости за последний месяц...
-
Tryapkonator
Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment.
а ещё круче будет сходники MySQL заточить под свою задачу! ;)
Чем тебя и устраивает повесить обычный индекс на поле date?
Кстати расскажи ка что у тебя за БД...
-
commander
Ткните пожаплуйста пальцем, где в вопросе стоит слово MySQL?
:) Мне оно не попалось вплоть до вашего сообщения.
-
sarutobi
нет нет, я писал про MySQL, погляди мои посты.
commander
Скинул в личку инфу
-
sarutobi
какие ещё базы данных вы знаете помимо MSSQL в которых имеються кластерные индексы?
P.S. к тому же я уже привык что по умолчанию тут обсуждаеться MySQL...
-
commander:
где вы в MySQL разглядели кластерные индексы?
в InnoDB есть кластерный индекс.