Реклама на сайте Advertise with us

Оптимизация MySQL

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 16/08/08 в 22:38       Ответить с цитатойцитата 

собсно при работе с 10м записей в таблице SELECT ... LIMIT 1 запрос подтормаживает на 2-3 сек... с 10к записями все норма
вопрос, как можно оптимизировать операции с таблицами больших объемов?

0
 



С нами с 16.09.05
Сообщения: 38
Рейтинг: 54

Ссылка на сообщениеДобавлено: 16/08/08 в 22:46       Ответить с цитатойцитата 

Одназначно мало информации для ответа.

http://dev.mysql.com/tech-resources/presentations/presentation-oscon2000-20000719/ конечно же читал уже?

Блог на миллион

5
 



С нами с 01.03.07
Сообщения: 304
Рейтинг: 223

Ссылка на сообщениеДобавлено: 17/08/08 в 09:41       Ответить с цитатойцитата 

ты бы структуру таблицы показал бы ?

5
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 17/08/08 в 11:24       Ответить с цитатойцитата 

Код:
CREATE TABLE `phpbb_users` (
  `user_id` mediumint(8) NOT NULL default '0',
  `user_active` tinyint(1) default '1',
  `username` varchar(25) NOT NULL default '',
  `user_password` varchar(32) NOT NULL default '',
  `user_email` varchar(255) default NULL,
  `user_icq` varchar(15) default NULL,
  PRIMARY KEY  (`user_id`),
  KEY `user_id` (`user_id`)
);

0
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 17/08/08 в 12:04       Ответить с цитатойцитата 

индексы добавь сначала.
А потом все зависит от железа, типа запроса.

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

5
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 17/08/08 в 15:28       Ответить с цитатойцитата 

1) везде varchar() замени на char().
2) если база в 10м записей, убери KEY `user_id` (`user_id`).
3) сконвертируй базу в InnoDB тип.

Чудес на обещаю, но должно помочь.

5
 



С нами с 09.08.08
Сообщения: 101
Рейтинг: 70

Ссылка на сообщениеДобавлено: 18/08/08 в 00:07       Ответить с цитатойцитата 

Ставишь форум на такую железку и всё будет нормально работать icon_smile.gif

Цитата:

...
2) если база в 10м записей, убери KEY `user_id` (`user_id`).
...


Это форум. Там при каждом открытии страницы куча запросов с выборкой по этому полю проходит.

А вообще, надо сам запрос увидеть. Вслепую тока ёжики сношаются icon_rolleyes.gif

Resources for webmasters - мои маленькие, но гордые ресурсы :)

5
 

« ... full on ... »

С нами с 17.03.07
Сообщения: 670
Рейтинг: 1686

Ссылка на сообщениеДобавлено: 18/08/08 в 07:39       Ответить с цитатойцитата 

Как вариант - разделить таблицу на 3-4 или более, где в каждой будет 1-2 млн. записей, выборку делать по user_id > N/M/K и т.д. Т.е., если (user_id > 0 && user_id <= 1500000) table = phpbb_users_1, если (user_id > 1500000 && user_id <= 3000000) table = phpbb_users_2 и т.д. Это довольно распространённая практика при делении нагрузки, выхлоп очень неплохой. Такой свитчер ставиться до запроса к базе в приложении (в скрипте PHP, например). Если в PhpBB все SQL-запросы идут через 1 интерфейс (класс вроде adodb), то можно подобный свитчер воткнуть прямо в функции запроса - это 4-5 строчек кода.

При этом, конечно, индексов бы ещё воткнуть и хорошо бы отключить функционал форума, который делает не особо нужные update/delete (вроде last visit time, last ip и т.п.), т.к. это лочит таблицу при каждом запросе.

Power of the lime madness...

5
 



С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362

Ссылка на сообщениеДобавлено: 18/08/08 в 11:23       Ответить с цитатойцитата 

nostalgie писал:

Это форум. Там при каждом открытии страницы куча запросов с выборкой по этому полю проходит.


Я это и без тебя прекрасно знаю, свои домыслы оставляй при себе, если не знаешь о чем говоришь.

5
 



С нами с 09.08.08
Сообщения: 101
Рейтинг: 70

Ссылка на сообщениеДобавлено: 18/08/08 в 11:40       Ответить с цитатойцитата 

xreload
Я знаю о чем говорю. Я предположил, что выборка идет по user_id. Если убрать с этого поля индекс - тормоза намного увеличатся.

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

dixi

Resources for webmasters - мои маленькие, но гордые ресурсы :)

5
 



С нами с 09.08.08
Сообщения: 101
Рейтинг: 70

Ссылка на сообщениеДобавлено: 18/08/08 в 12:32       Ответить с цитатойцитата 

Тьфу блин.. там primary и key

key все-таки стоит убрать

Resources for webmasters - мои маленькие, но гордые ресурсы :)

0
 



С нами с 09.08.08
Сообщения: 101
Рейтинг: 70

Ссылка на сообщениеДобавлено: 18/08/08 в 12:37       Ответить с цитатойцитата 

Тьфу блин.. там primary и key

key все-таки стоит убрать

Resources for webmasters - мои маленькие, но гордые ресурсы :)

0
 



С нами с 01.03.07
Сообщения: 304
Рейтинг: 223

Ссылка на сообщениеДобавлено: 19/08/08 в 23:14       Ответить с цитатойцитата 

если ставишь varchar ставь их кратным 2, если место не жалко то ставь char Для некоторых полей например ICQ , работать будет быстрее но база будет намного больше,


ну и самое главное ключи поставь, как уже тут сказали, везед где можно поставь LIMIT, указывай не * а поля точно, а так запрос сам нужно видеть чтоб точно сказать

0
 



С нами с 03.05.07
Сообщения: 801
Рейтинг: 825

Ссылка на сообщениеДобавлено: 19/08/08 в 23:39       Ответить с цитатойцитата 

Без запроса тебе тут никто ничего не скажет по теме. Все советуют оптимизировать поля, поставить индексы и т.п. Это всё, само собой, верно. Но может там у тебя в выборке километровое регулярное выражение, или несколько условий с подстроками, или куча джойнов - тогда никакие индексы не помогут. Может у тебя условие WHERE user_username='user' AND user_password='pass' AND user_email='e@mail' - обычно такие запросы дико тормозят даже на мелких базах. Показал бы запрос, сразу бы всё стало ясно.

Но итак видно, что таблица не очень. "`user_icq` varchar(15) default NULL" - вот это жесть конечно. Если по user_icq идёт выборка, то поле надо делать как BIGINT. Да и CHAR побыстрее VARCHAR.

Если у тебя обычный SELECT * FROM phpbb_users LIMIT 1, то тогда лучше оттюнить мускуль, отдать ему больше памяти. Проверь ещё чтобы тейбл был MyISAM. В любом случае, погляди сам, или попроси админа, переменные: table_cache, key_buffer, back_log (может ты выполняешь запрос с уже сильно нагруженной базой), sort_buffer, thread_concurrency (если многопроцессорная система) и т.п.

Ещё вариант, если ты реально ищешь по строкам и можешь подправить софт. К примеру, ты всегда ищешь по юзеру и пассу (проверка на логин, очень часто юзается) - в данном случае проще сделать хеш для каждого юзера (что-нибудь вроде crc32($username.$password)) и по нему уже искать.

создай свою партнёрку

0
 



С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010


Передовик Master-X (16.03.2006) Передовик Master-X (01.04.2006) Передовик Master-X (16.04.2006) Передовик Master-X (01.05.2006) Передовик Master-X (01.11.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 20/08/08 в 14:04       Ответить с цитатойцитата 

видимо все-же запрос сложный с left join... сделал в три запроса, стало быстрее работать

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »