Помогите оптимизировать запрос MySQL

1 23
T
На сайте с 28.06.2007
Offline
82
#21

Всем спасибо за внимание к проблеме.

Перенёс на postgresql, но проблема осталась :( видимо мало памяти.

Есть мысль держать в sphinx атрибуты для того, чтобы не делать выборку по ID из базы. Но тут всё упирается в память, ведь атрибуты хранятся в памяти.

Атрибуты varachar(100), есть возможность существенно сократить размер?

Ищу в документации, где-то видел что в Sphinx можно длину атрибутам задавать и тем самым уменьшить размер.

N
На сайте с 06.05.2007
Offline
419
#22
Trol:
Перенёс на postgresql, но проблема осталась видимо мало памяти.

внимательности и осознанных действий у вас мало.

план запроса видели? что сделали чтобы его исправить?

Кнопка вызова админа ()
T
На сайте с 28.06.2007
Offline
82
#23

SELECT SQL_NO_CACHE пробовал, толку никакого. Результаты запроса не понадобятся, кеш не нужен, но его отключение не ускорило выполнение запроса.

Настройки MySQL:

skip-locking

max_connections=2
max_allowed_packet=32M
query_cache_size=2M
table_cache=256
tmp_table_size=2M
thread_cache_size=128
thread_concurrency=64
myisam_max_sort_file_size=300M
myisam_sort_buffer_size=200M
key_buffer_size=3700M
read_rnd_buffer_size=320M
sort_buffer_size=240M
ft_min_word_len =1
[myisamchk]
key_buffer = 3700M
sort_buffer_size = 30M
ft_min_word_len =1

Funaki, спасибо, но тоже самое. Когда много ID, долго выполняется.

netwind, пробовал разбивать на несколько запросов, поделив список ID по 1000. Но в совокупности получается также долго, как и один запрос.

N
На сайте с 06.05.2007
Offline
419
#24
Trol:
netwind, пробовал разбивать на несколько запросов, поделив список ID по 1000. Но в совокупности получается также долго, как и один запрос.

Мало внимательности. Попробуйте теперь второй предложенный мной вариант : "Или просто выражение force index."

А вот эта настройка обязательна ?

ft_min_word_len =1

вы используете и sphinx и встроенные индексы ? может сильно увеличивать объем встроенных индексов.

IL
На сайте с 20.04.2007
Offline
435
#25
Trol:
Когда много ID, долго выполняется.

Вроде предложения были, но ответа не увидел.

Если id вставлять в memory-таблицу из одного столбца id и по нему JOIN-ить?

И ещё момент - размер primary-индекса таблицы какой? И ограничения на индексы в конфиге?

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
T
На сайте с 28.06.2007
Offline
82
#26

netwind, спасибо, force index пробовал, не помогло. ft_min_word_len это для FULLTEXT было, пробовал его, но не устроило, вот решил на sphinx переидти.

ivan-lev, размер Primary 1Гб. Ограничения на индексы наверное по умолчанию, не знаю как их можно указать в конфиге. Попробовал загонять id в memory таблицу, затем join'ить. Так гораздо быстрее, но почему-то результат в файл медленно сохраняется и в phpmyadmin выводится долго.

Запрос:

SELECT name FROM tmp_tabl JOIN FULL WHERE FULL.id=tmp_tabl.id

Отображает строки 0 - 29 (8,688 всего, запрос занял 0.2990 сек.)

но по факту в phpmyadmin выводит дольше, около 40 секунд. С чем это связано?

Например такой запрос:

SELECT name FROM tmp_tabl JOIN FULL WHERE FULL.id=tmp_tabl.id  INTO OUTFILE 'путь'

выполняется 40 секунд, а обычный селект пишет запрос занял 0.2990 сек

N
На сайте с 06.05.2007
Offline
419
#27
Trol:
спасибо, force index пробовал, не помогло.

что значит не помогло? план изменился? какое время стало?

если вы полностью убрали все полнотекстовые запросы - удалите и полнотекстовые индексы.

IL
На сайте с 20.04.2007
Offline
435
#28
Trol:
Ограничения на индексы наверное по умолчанию, не знаю как их можно указать в конфиге.

Запустите скрипт mysql-primer.sh (гуглить из открытых источников, при желании - посмотреть) - всё, что подсветит красным - заслуживает Вашего внимания.

1 23

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