MySQL медленная выборка по PRIMARY KEY, что делать?

1 23
Dreammaker
На сайте с 20.04.2006
Offline
566
#21

У меня вот, наоборот, проект постепенно мигрирует с монги на postgresql. Те запросы, которые в монги тормозят время от времени, в постгре даже без шаманизма работают быстро (оговорка используется fts в постгре, там запросы с OR слегка подтормаживают и нужно шаманить).

danforth
На сайте с 18.12.2015
Offline
153
#22

Не смотря на то, что автор уже определился с выбором, там на самом деле ещё бы конфиг MySQL глянуть, потому что если там есть query_cache, он может довольно таки хорошо убивать производительность, если запросы летят в разные части индекса, и есть запросы на вставку.

Я сталкивался с багом, когда на двух почти идентичных VPSках (2 гб, и 1 ядро), с одинаковыми данными, с одинаковыми конфигами, на одной VPS планировщик выбирал эффективный план, а на другой - медленный. Помог логический дамп, и пересоздание базы и таблиц.

Junior Web Developer
edogs software
На сайте с 15.12.2005
Offline
771
#23
Solmyr:
отдельную таблицу из id, value и буду ее хранить в MariaDB в таблице типа Memory.

Если почти не будет операций вставки/удаления, то норм. Если же будут вставки/удаления, то имхо лучше рассмотреть другой вариант сделать виртуальный диск из памяти и кинуть майисамную таблицу туда (вместо создавания мемори). Останутся все преимущества обычной таблицы и одновременно с этим реактивная скорость.

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft
SocFishing
На сайте с 26.09.2013
Offline
118
#24

Solmyr, попробуйте залимитировать выборку. Или вам сразу нужны все результаты сразу?

Поле ID строковое? https://ru.stackoverflow.com/a/511197/179289

Может есть возможность изначально разбить этот массив данных. Заведомо как-то переформировать. Например по алфавиту ключа и тд.

★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
Solmyr
На сайте с 10.09.2007
Offline
501
#25
SocFishing:
Может есть возможность изначально разбить этот массив данных. Заведомо как-то переформировать. Например по алфавиту ключа и тд.

Партишенинг или шардинг всегда должен работать медленнее чем первичный ключ, даже для ключа типа BTREE не говоря о ключе HASH. Если партишенинг работает быстрее ключа, с ключом точно что-то не так.

---------- Добавлено 28.03.2020 в 16:48 ----------

Dreammaker:
оговорка используется fts в постгре

FTS я вообще делаю на сфинксе, пока минусов не заметил.

Dreammaker
На сайте с 20.04.2006
Offline
566
#26
Solmyr:
FTS я вообще делаю на сфинксе, пока минусов не заметил.

Я со сфинкса переехал на постгре. Сфинкс тогда остановился в развитии был (это было года 3 назад) и новый поиск у постгре была быстрее. Сейчас трудно сказать, но у постгре моментальный фтс, если не OR между словами и массив лемм не сотни на одну запись.

А у меня и то, и другое. :)

danforth
На сайте с 18.12.2015
Offline
153
#27
Solmyr:
Партишенинг или шардинг всегда должен работать медленнее чем первичный ключ, даже для ключа типа BTREE не говоря о ключе HASH. Если партишенинг работает быстрее ключа, с ключом точно что-то не так.

С чего вы это взяли?

Solmyr
На сайте с 10.09.2007
Offline
501
#28
danforth:
С чего вы это взяли?

С того что BTREE всегда эффективно делит подмножества, а партишенинг не всегда, даже при эффективной природе ключа партишенинга количество подмножеств не всегда равно степени двойки.

danforth
На сайте с 18.12.2015
Offline
153
#29
Solmyr:
С того что BTREE всегда эффективно делит подмножества, а партишенинг не всегда

Партиционирование по хешу тоже делит данные эффективно. Учитывая, что там можно использовать даже PARTITION BY HASH (id div 1000), таким образом ряд из 1000 непрерывных id попадет в одну и ту же партицию. И можно даже range запросы делать по ним. Оптимизатор знает, в какую партицию ему сходить на основании запроса. Ему нужно ходить по дереву небольшой партиции, вместо большого дерева одной жирной таблицы. Вставка, кстати, тоже более эффективна.

Solmyr:
даже при эффективной природе ключа партишенинга количество подмножеств не всегда равно степени двойки.

А почему количество подмножеств должно быть равно степени двойки? :)

1 23

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