Подскажите хорошую статью по индексам

nick4

Guest
Подскажите хорошую статью по индексам

Нигде не смог найти хорошей, подробной статьи по индексам.. (как они работают, как расставляются и т.д.)
Подскажите если такое есть..
 

nick4

Guest
Сейчас прочитаю документацию,
а пока хотел спросить, нормален ли такой расклад:

моя структура:
id int(10) auto_increment,
char char(35),
site tinyint(3),
hits int(10)

стоят три индекса:
KEY PRIMARY: id => id
KEY UNIQUE: uniq => char, site
KEY: hits => hits

запросы основные:
WHERE id=
WHERE char= AND site=
WHERE hits ORDER BY hits LIMIT 0, 20

ни о каких LIKE даже речи не идет..

в базе сейчас примерно 60 тыс. строк (почистил таблицу..), в день примерно +20 тыс.
сейчас три запроса еле укладываются в 10 секунд.. при большем кол-ве строк - >30-40 секунд
у меня дедик Xeon 2.40GHz и MySQL приходится несколько раз в сутки перезапускать!, только потому что она виснет, у меня руки опускаются - не знаю что делать, запросы вроде тоже не такие тяжелые, и индексы на мой взгляд правильные (хотя я поверхностно разбираюсь), поскажите в каком направлении идти - неуж-то MySQL не держит столько строк? я не верю..
 

Фанат

oncle terrible
Команда форума
вставка очень сильно напрягает таблицу.
гораздо сильнее, чем селект запись в файл всегда медленнее, чем чтение.
Вставка же с ИНДЕКСОМ напрягает ЕЩЕ БОЛЬШЕ - индекс надо ПЕРЕСТРОИТЬ!
оттого она у тебя и падает, бедняжка.

-~{}~ 29.09.04 16:37:

и все это - ради вшивой, никому не нужной цыферки
 

nick4

Guest
Originally posted by Фанат
вставка очень сильно напрягает таблицу.
гораздо сильнее, чем селект запись в файл всегда медленнее, чем чтение.
Вставка же с ИНДЕКСОМ напрягает ЕЩЕ БОЛЬШЕ - индекс надо ПЕРЕСТРОИТЬ!
оттого она у тебя и падает, бедняжка.
Но дело в том что я описал пример не затрагивая вставку даже..
Единственное что делает мой select это обновляет на $i++; колонку hits.

хорошо, а какой индекс именно не правильный и почему?

-~{}~ 29.09.04 16:44:

и все это - ради вшивой, никому не нужной цыферки
в голове сразу несколько вариантов:
id, - но ведь по нему должен быть PRIMARY, и по нему тоже делаются селекты
site? - это нужный параметр, так как идет в паре с char unique
hits - и вроде по этому тоже идут селекты..

не соображаю
пожалуйста не мучай, обьясни какой и почему?
 

Фанат

oncle terrible
Команда форума
Но дело в том что я описал пример не затрагивая вставку даже..
А зачем тут твой пример?
как будто из состава таблицы неясно, что она дергается при каждом хите. :)

я никого не мучаю.
у тебя горит?
тебе нужен готовый рецепт - "подкрути там-то и все залетает"? Это не ко мне. Это к Кашпировскому.
Не хочешь разбираться - мне это тем более не надо
 

nick4

Guest
Originally posted by Фанат
А зачем тут твой пример?
как будто из состава таблицы неясно, что она дергается при каждом хите. :)
Это не разумно? Какой вариант тогда лучше? сделать еще одну колонку где будет только ID и hits?


я никого не мучаю.
у тебя горит?
тебе нужен готовый рецепт - "подкрути там-то и все залетает"? Это не ко мне. Не хочешь разбираться - мне это тем более не надо
не нужен мне готовый рецепт, потому что во-первых я знаю твой здешний характер, потому-что читаю форум переодически, и никогда в лоб не стал бы просить готовенькое :), во-вторых мне самому интересно понять почему.

в документации про индексы написано скудно, разобратся я и хочу, не хватает знаний, сейчас попробовал расставить таймеры предварительно убив индекс на hits - получилось действительно что самый тяжелый запрос UPDATE hits, но и SELECT char FROM chars ORDER BY hits LIMIT 0,20 ничем не уступает.
 

Фанат

oncle terrible
Команда форума
лично я вообще не понимаю, нафига тебе для этой бороды база данных.
я понимаю - статистику вести нормальную.
а тут - пальцы загибать. Файла за глаза хватит.

вообще, тебе что надо-то?
цыферку выводить? статистику вести?
статистику ведут по логам.
цыферку выодят скриптм на 10 строк.
 

nick4

Guest
Originally posted by Фанат
лично я вообще не понимаю, нафига тебе для этой бороды база данных.
я понимаю - статистику вести нормальную.
а тут - пальцы загибать. Файла за глаза хватит.

вообще, тебе что надо-то?
цыферку выводить? статистику вести?
статистику ведут по логам.
цыферку выодят скриптм на 10 строк.
статистику обращений к сайту с поисковых систем (по запросам)
где char - это слово.

файла хватит?
ну во-первых мне нужен auto_increment, потому что он нужен в определенном запросе
во-вторых получать информацию из файла "за определенное слово" перебирая при этом 100 тысяч строк - на мой взгляд тем-более не разумно, ну и кроме того мне как-то надо еще обновлять статистику хитов по этому запросу.

да есть еще масса вещей почему использования файла невозможно..
 

Фанат

oncle terrible
Команда форума
тебе нужны запросы с поисковиков для того, чтобы вывести цыферку?
кто тебе мешает вести статистику, я не понимаю.
Веди на здоровье.
Но зачем мешать ее с цыферкой, для которой достаточно файла?
 

nick4

Guest
Originally posted by Фанат
Но зачем мешать ее с цыферкой, для которой достаточно файла?
тоесть ты предлогаешь для каждого из слова в таблице создать свой файл с хитами по нему?
если да - то 100-300.000 файлов для одних циферок это разве выход?
 

Фанат

oncle terrible
Команда форума
Я предлагаю разделить нагрузку. ВСТАВКУ и ВЫБОРКУ.
как решение проблемы.
конкретного же я ничего не предлагаю, поскольку могу только догадываться из обрывков, которыми меня кормят.
 

ONK

Пассивист PHPСluba
nick4, не надо так активно спрашивать чтолибо у человека, который не очень компетентен в обсуждаемом вопросе.

Лучше покажи полностью запросы которые торомзят и их EXPLAIN
 

Фанат

oncle terrible
Команда форума
Да-да.
надо привести експлайн атомарного инсерта и натужно морщить на ним мозги.
 

ONK

Пассивист PHPСluba
Фанат, инсерты здесь не торомзят (вставка новой записи в такую таблицу не более 3 милллисек), если не знаеш проблемы, то просто не флейми в ветке.
 

nick4

Guest
EXPLAIN из phpmyadmin подойдет?

EXPLAIN SELECT id,hits FROM words WHERE char='test test' AND site=1
TIME: 5-7 sec.

type: const
possible_keys: uniq
key: uniq
key_len: 36
ref: const,const
rows: 1
Extra:
EXPLAIN SELECT id,hits FROM words ORDER BY hits LIMIT 0,20
TIME: 5-10 sec.

table: words
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 72384
Extra: Using filesort
EXPLAIN SELECT char FROM words WHERE id=700

table: words
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
Extra:
 

Фанат

oncle terrible
Команда форума
ONK
вставка новой записи в такую таблицу не более 3 милллисек
Это заблуждение.

Короче.
Я покушал и мысль прояснилась.
Шо я хочу сказать.
Разнести надо вставку и выборка.
Если цыферка нужна, то писать в небольшую таблицу.
Если же не нужна, то тем более - нафиг вообще базу - пишем логи, которые не торопясь уже разлаживаем по базе.
 
Сверху