У меня есть таблица, как вы можете видеть ниже
Listings
-----------------------------------------------------------------
ListingID Make Model Year Zipcode
1 BMW 325 2009 90210
2 Mercedes 330 C 2006 33160
3
около 2 миллионов строк. Каждый день я добавляю новые строки и удаляю старые.
В моем приложении я запрашиваю эту таблицу, перечисляя, по марке, по марке и модели, по марке и модели.
У меня есть кластеризованный индекс для ListingID и некластеризованный для всех остальных столбцов.
если я запрашиваю таблицу по listid, я получаю очень быстрый ответ. по марке, модели, почтовому индексу это очень медленно. например, чтобы вернуть 10000 записей с присоединяющейся таблицей с почтовыми индексами, около 25-30 секунд.
вот размер этой таблицы
Вот пример запроса, который я использую для возврата списка в пределах определенного радиуса.
Сначала на основе почтового индекса и радиуса, с помощью функции я вставляю почтовый индекс во временную таблицу #CloseZips (занимает 0 секунд). Эта процедура очень быстро возвращает почтовый индекс в радиусе 0 секунд.
Во-вторых, я присоединяюсь к таблице списков, вы можете видеть. Эта часть занимает время 25-60 секунд
SELECT ListingID, Make, Model, Year, L.Zipcode, Year
FROM Listings L WITH (NOLOCK)
INNER JOIN #CloseZips Z ON Z.ZipCode = L.Zipcode
WHERE L.Make = @Make AND L.Model = @Model AND L.IsActive = 1
ORDER BY Z.Distance DESC
Вопросы:
Какой подход был бы правильным подходом для повышения производительности на такого рода
таблицы размеров?
Нужно ли иметь индексы для всех столбцов?
Каков наилучший способ ведения таких таблиц?