Почему SQL Server не загружает мой индекс в память? - PullRequest
1 голос
/ 16 декабря 2008

У меня есть таблица с 8 миллионами записей со многими полями, включая значения lat / long, и индекс по полям Lat / Long.

Я делаю запрос, чтобы найти записи, которые попадают в квадрат вокруг точки (чтобы потом уточнить в круг), что-то вроде:

ВЫБЕРИТЕ Lat, Long ИЗ данных WHERE (Lat между 1 и 2) и (Long между 1 и 2).

На моем компьютере разработчика он использует индекс и возвращает примерно через 50 мс (в первый раз, когда я делаю запрос для определенной точки).
На моем рабочем сервере он также использует индекс, но для возврата первого запроса требуется около 2-4 секунд, для следующих запросов - 10 мс.

На моем компьютере разработчика SQL Server занимает 500 МБ памяти, на моем сервере - около 130 МБ.

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

Правильно ли мое предположение? Что я могу сделать, чтобы это исправить?

Это SQL Express 2005 (бесплатная версия) на W2k3 на обеих машинах. Единственное отличие, которое я могу себе представить, заключается в том, что моя машина 32-разрядная, а сервер 64-разрядный, но я не думаю, как это может повлиять на загрузку индекса в памяти.

Кроме того, серверу не хватает памяти. Он имеет физическую память 2 Гб и заряд коммита около 500 Мб, так что есть много свободного.

Любые идеи будут с благодарностью! Спасибо!

1 Ответ

2 голосов
/ 16 декабря 2008

Когда я сталкиваюсь с такой ситуацией, я обычно пытаюсь сделать две вещи в следующем порядке:

1 - обновить статистику по этой таблице:

ОБНОВЛЕНИЕ СТАТИСТИКИ Данные

2 - Перестройте индекс: (щелкните правой кнопкой мыши индекс в SQL Server Management Studio и выберите Перестроить)

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