MySQL занимает в 50 раз больше времени, чтобы вернуть на 20% больше записей, почему? - PullRequest
0 голосов
/ 07 декабря 2011

Я использую программу, которую я скачал, и у меня нет всей информации. Это веб-приложение (Python CGI), которое принимает данные пользователя и запрашивает базу данных mysql. Что я знаю, так это то, что когда я ограничиваю набор записей до 100 результатов (в настройках приложения), результаты возвращаются в течение 2 секунд. Но если я немного увеличу лимит до 120, то обработка займет более 1,5 минут! Я пробовал несколько разных запросов, и все они поддаются этой проблеме. Это ошеломляет. Не зная точно, как реализованы запросы, существуют ли какие-то общие настройки mysql, которые я должен рассмотреть, чтобы смягчить эту проблему?

UPDATE

После дополнительных испытаний я обнаружил, что 107 - это магическое число, которое вызывает эту проблему производительности. Все, что ниже 107 записей, возвращается мгновенно, тогда как все, что> = 107, занимает по меньшей мере 1,5 минуты или время ожидания увеличивается.

1 Ответ

3 голосов
/ 07 декабря 2011

Скорее всего, запрос содержит какую-то логику, которая приводит к экспоненциальному времени выполнения.

Например, если у меня есть список местоположений и я хочу вычислить расстояния между ними:

Для 2 строк без оптимизации:

1 => 2
2 => 1

Для 4 строк без оптимизации

1 => 2
1 => 3
1 => 4
2 => 1
2 => 3
2 => 4
3 => 1
3 => 2
3 => 4
4 => 1
4 => 2
4 => 3

Здесь ясно, что удвоение набора данных не просто удваивает выполнениевремя.

Увеличьте масштаб до вашей проблемы, и это может объяснить снижение производительности.Не увидев запросы, мы не сможем вам намного помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...