Автор Тема: Индексы таблицы  (Прочитано 8917 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« : 21 Июня 2005, 12:45:58 »
Есть таблица новостей. Записей примерно 10 000, в день прибовляется порядка 30-50 записей. Неправильно индексил таблицу и сейчас сижу правлю, сталкнулся с проблемкой. Есть 2 независимых поля, дата (date, тип данных DATE) и латинское имя (lname, тип данных VARCHAR) новости (для ЧПУ). Так же есть куча смежных таблиц типа рейтинга и комментариев, которые соеденяются с таблицей новостей по ключу lname. Новости отображаются за конкретное число. Внимание вопрос =)))
Какой индекс правильнее кластеризовать? С одной стороны Кластеризация даты (индекс будет разряженым) поможет отображать список новостей на странице, но с другой стороны если кластеризовать латинское имя, это позволит более быстро соединять новость с комментами и рейтингом при отображении конкретной новости. Вот сижу и думаю, вообще я больше скланяюсь к первичной индексации даты, но вдруг я не прав =) Может кто сталкивался или есть какие мысли по этому поводу.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #1 : 21 Июня 2005, 14:00:39 »
а что мешает попробовать?

Оффлайн sarutobi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 61
  • +0/-0
  • 0
    • Просмотр профиля
Индексы таблицы
« Ответ #2 : 21 Июня 2005, 20:40:54 »
Хмм... Если я правильно помню теорию БД то кластеризуют только Primary Key, одно из обязательных свойств которого - уникальность для любой строки таблицы. Date под это определение подходит с натягом, т.к есть ненулевая вероятность совпадения дат.
В твоем случае я бы попробовал создать сложный индекс date+lname.

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #3 : 22 Июня 2005, 10:25:32 »
Да, намудрил, теорию я плохо помню =( если делать составной индекс по ключам date+lname, то точечные запросы по lname будут выполняться достаточно медленно. Ладно, попробую воспользоваться драгоценным советом   RomikChef`а, через пару дней скину стату сюда...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Индексы таблицы
« Ответ #4 : 22 Июня 2005, 12:46:49 »
sarutobi
Цитировать
Если я правильно помню теорию БД

не правильно помнишь!
Tryapkonator
индекс вешать на date
And no religion too...

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #5 : 22 Июня 2005, 12:59:57 »
commander
Речь идет о кластеризованном, т.е. первичном индексе, MySQL ругается на дубли. Даты у многих новостей совпадают, но я почему то был уверен что не смотря на дубли можно кластеризовать индекс даты. Это MySQL не умеет, или я опять не то делаю?

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Индексы таблицы
« Ответ #6 : 22 Июня 2005, 13:02:22 »
зачем тебе первичный индекс?
And no religion too...

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #7 : 22 Июня 2005, 13:05:33 »
чтобы индексы новостей с одинаковыми датами лежали совсем рядом на диске, чтобы не нужно было листать все индексы по дате и выбирать нужную

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Индексы таблицы
« Ответ #8 : 22 Июня 2005, 16:12:27 »
Tryapkonator
полезно наверное будет почитать... ;)
http://www.mysql.ru/docs/man/MySQL_indexes.html
And no religion too...

Оффлайн sarutobi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 61
  • +0/-0
  • 0
    • Просмотр профиля
Индексы таблицы
« Ответ #9 : 22 Июня 2005, 16:18:09 »
commander
Вообще то правильно помню.... Кластеризовать можно тока первичный индекс - а он по определению уникальный.
Насчет ссылки что ты привел - там действительно много полезного про индексы вообще и в MySQL в частности.
Но советую почитать про кластерный индекс, а потом уже думать как помочь человеку.

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Индексы таблицы
« Ответ #10 : 22 Июня 2005, 16:22:17 »
sarutobi
где вы в MySQL разглядели кластерные индексы?
And no religion too...

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #11 : 22 Июня 2005, 16:49:45 »
commander
Неужели не кластеризуются? Тогда зачем приписка PRIMARY =( Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment. Хотя с другой стороны опять же нужны то точечные запросы на дату. Но думаю это будет быстрее. Попробую сегодня, ближе к утру, а то трафика ща много на сервере. А вообще помойму проще выделить темповую таблицу под новости за последний месяц...

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Индексы таблицы
« Ответ #12 : 22 Июня 2005, 16:56:46 »
Tryapkonator
Цитировать
Впринципе я подумал, можно ведь создать левый индекс с auto_increment и сделать составной кластеризованный индекс на основе даты и того, что с auto_increment.

а ещё круче будет сходники MySQL заточить под свою задачу! ;)
Чем тебя и устраивает повесить обычный индекс на поле date?
Кстати расскажи ка что у тебя за БД...
And no religion too...

Оффлайн sarutobi

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 61
  • +0/-0
  • 0
    • Просмотр профиля
Индексы таблицы
« Ответ #13 : 22 Июня 2005, 19:59:16 »
commander
Ткните пожаплуйста пальцем, где в вопросе стоит слово MySQL?
:) Мне оно не попалось вплоть до вашего сообщения.

Оффлайн Tryapkonator

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 92
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Индексы таблицы
« Ответ #14 : 22 Июня 2005, 20:02:59 »
sarutobi
нет нет, я писал про MySQL, погляди мои посты.
commander
Скинул в личку инфу

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28