Пара вопросов спецам по мускулу

1 234 5
Dreammaker
На сайте с 20.04.2006
Offline
569
#21
Dreammaker:
f.view

Это количество просмотров? Если да, то значит оно будет разное, и как мне кажется установка тройного индекса типа CREATE INDEX tr_index ON f_table(ok, view, ero)

может ускорить выборку, устраняя скользское место - HAVING - неиспользование оптимизации.

В данный момент having помогло, но, имхо, не совсем кошерно его использования, особенно не в групповых фунциях.

Но опять же без EXPLAIN трудно что-то сказать :)

D
На сайте с 05.06.2007
Offline
155
#22

тройной индекс возможно решение, но этими параметрами мало чего отсеивается, поэтому думаю что особо этот индекс нам не поможет )

ok - проверенная фотка.. т.е. почти все 1

ero - +18 таких очень мало, т.е. почти все 0

view - способ отображения, там тоже почти везде одно значение 0

А чем черевато having? я так понимаю это повторная проверка всех выбранных данных? только в этом проблема?

Написал не мало шедевров ;)
N
На сайте с 06.05.2007
Offline
419
#23

а да я проглядел. кроме left join, когда вы задаете дополнительные условия - используется временная таблица с сортировкой и листание идет по ней. А когда условий нет, mysql "листает" сразу по индексу (n.id) и быстро.

order by n.id desc limit $start,$per - вот это постраничное листание в приложении можно переосмыслить? например, передавать в url последний n.id ?

Кнопка вызова админа ()
D
На сайте с 05.06.2007
Offline
155
#24

netwind, не желательно, а какой бы был тогда вариант?

Jooz
На сайте с 30.07.2007
Offline
49
#25
ciber:
1.Какой максимальный объем может потянуть последний мускул?
Речь идет о нескольких (20-100) таблицах с лимоном и более записей.

Максимальный объем ограничен винтами.

ciber:
Естественно рассматриваем абстрактное идеальное железо.

Увы, не бывает такого, но кластер вещь великая. Но есть и другой рецепт см. ниже.

ciber:
2.Есть ли резон заменить мускул чемто другим?

Не думаю. Если софт написан грамотно, то все что необходимо это минимизировать работу мускуля, а именно:

  • тяжелые запросы кидать в кеш, идеально memcached
  • софтом дергать не mysql, а mem.

В результате кроме уменьшения дисковой нагрузки получите еще и огромный резерв в процессорном времени. Разумеется mem тоже скушает памяти, но при условии "идеальной железо" в первую очередь рассматривайте грамотно собранную бздю с десятком палок по 2 гига.

Чтобы произошло чудо нужно обязательно дунуть (http://www.sape.ru/r.d06b0321e5.php). Если не дунуть (http://www.sape.ru/r.d06b0321e5.php) чуда не произойдет (С) А.Акопян т/п "Спокойной ночи малыши"
N
На сайте с 06.05.2007
Offline
419
#26

Dimanych, зато не самый плохой метод. попробуйте убрать в запросе "$start," и увидите как он превращается в обычное считывание по индексам без временной таблицы. ( я надеюсь поля проиндексированы? )

В url нужно будет передавать ИД последней фотки с прошлой страницы ($lastid) и выбирать потом дополнительным условием "where n.id > $lastid ... order by n.id desc limit $per"

можно еще попробовать sort_buffer в mysql подкрутить, но при объемных данных это все мертвому припарки.

D
На сайте с 05.06.2007
Offline
155
#27

Точно! Не подумал как то что ему будет достаточно смотреть только с того id с которого я укажу.

Но по сути дела, если для первой страницы, то старт равен 0, разве в этом случае не получатся тоже самое по эффективности что ваш метод? ) (хотябы даже для первой страницы, а их я не более 10 разрешаю просматривать) А вообще щас сам проверю )

N
На сайте с 06.05.2007
Offline
419
#28

Я подозреваю,что у вас все тормоза возникают на сортировке, которая выполняется во временных файлах. Возможно, если в explain пропадет "Using filesort" - будет эффект. Кстати, вас тут уже не просто так просили показать explain запроса.

А потом, если результат неудовлетворительный, можно попробовать индекс по трем полям. Увлечение индексами не должно быть чрезмерным - их же нужно при изменениях в таблицах обновлять тоже.

D
На сайте с 05.06.2007
Offline
155
#29

Всё перепробовал и по id вместо лимита.. единственное что улучшает это having, почти в 10 раз быстрее, впринцепи устраивает, не знаю как будет при увеличении базы.

Explain этого запроса

(
[0] => 1
[id] => 1
[1] => SIMPLE
[select_type] => SIMPLE
[2] => n
[table] => n
[3] => ALL
[type] => ALL
[4] =>
[possible_keys] =>
[5] =>
[key] =>
[6] =>
[key_len] =>
[7] =>
[ref] =>
[8] => 85574
[rows] => 85574
[9] => Using where; Using filesort
[Extra] => Using where; Using filesort
)

(
[0] => 1
[id] => 1
[1] => SIMPLE
[select_type] => SIMPLE
[2] => f
[table] => f
[3] => eq_ref
[type] => eq_ref
[4] => PRIMARY
[possible_keys] => PRIMARY
[5] => PRIMARY
[key] => PRIMARY
[6] => 4
[key_len] => 4
[7] => usr_web1_1.n.foto
[ref] => usr_web1_1.n.foto
[8] => 1
[rows] => 1
[9] =>
[Extra] =>
)
N
На сайте с 06.05.2007
Offline
419
#30

это сейчас или раньше?

приведите полные тексты запросов и explain к каждому. и лучше без этой гадости phpшной - глаза сломать можно.

1 234 5

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий