Является ли SQL-тест одинаковым для больших чисел? - PullRequest
0 голосов
/ 13 августа 2010

Я запускаю один и тот же запрос в двух почти идентичных базах данных. Единственное отличие состоит в том, что первая база данных имеет записи идентификаторов от 1 до 9000 для 2 таблиц, а другая находится в диапазоне 458231044 и 103511044 для 2 одинаковых таблиц. (для тех же 9000 записей)

Запрос сравнивает ID и время UNIX много раз.

Запуск его на первой базе данных занимает едва заметное время. Во-вторых, это как минимум 30 секунд.

Есть ли вероятность, что проблема вызвана сравнением больших чисел? Если так, как вы это исправите? Будет ли сравнение строк быстрее?

Ответы [ 3 ]

1 голос
/ 13 августа 2010

Простой способ проверить это - просто попробовать следующее:

SELECT (1 = 1);
SELECT (9000 = 9000);
SELECT (1234567890 = 1234567890);

Если последний медленнее, это проблема сравнения.

Я подозреваю, что это не числовое сравнение, а побочный эффект большого первичного ключа или вакуумоподобной операции, которую необходимо выполнить. У двух других таблиц диапазоны настолько высоки, потому что они были заполнены, а позже были удалены строки, или они действительно начинались с таких больших PK?

1 голос
/ 13 августа 2010

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

Убедитесь, что у вас одинаковые индексы в обеих базах данных.

0 голосов
/ 13 августа 2010

Это может быть тип данных, используемый для этого конкретного индекса.Имеет смысл, что если это больший тип данных, то сравнение может занять больше времени.

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

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