У меня есть база данных размером 6 ГБ, с множеством таблиц, но, похоже, у небольших запросов больше всего проблем, и я хочу знать, что можно сделать для их оптимизации, например, есть таблица запасов, товаров и заказов. .
Таблица Stock - это позиции на складе, в которых содержится около 100 000 записей с 25 полями, в которых хранятся ProductCode, Price и другие данные, относящиеся к акциям.
В таблице «Предметы» хранится информация об элементах, из которых более 2 000 000, а в более чем 50 полях хранятся названия элементов и другие сведения о рассматриваемом элементе или продукте.
В таблице «Заказы» хранятся «Заказы на складе», на которые был сделан заказ, плюс цена, за которую они проданы, и около 50 000 записей.
Вот запрос из этой базы данных:
SELECT Stock.SKU, Items.Name, Stock.ProductCode FROM Stock
INNER JOIN Order ON Order.OrderID = Stock.OrderID
INNER JOIN Items ON Stock.ProductCode = Items.ProductCode
WHERE (Stock.Status = 1 OR Stock.Status = 2) AND Order.Customer = 12345
ORDER BY Order.OrderDate DESC;
Учитывая приведенную здесь информацию о том, что можно сделать для улучшения этого запроса, есть и другие подобные, какие есть альтернативы. Однако природа данных и базы данных не может быть детально детализирована, поэтому, если будут даны общие приемы и методы выбора, они подойдут или что-нибудь, что обычно применяется к базам данных.
База данных - MS SQL 2000 на Windows Server 2003 с последними пакетами обновлений для каждого.
Обновление БД / обновление ОС пока недоступно.
Редактировать
Индексами являются Stock.SKU, Items.ProductCode и Orders.OrderID в упомянутых таблицах.
План выполнения составляет 13-16 секунд для запроса, как это 75% времени, проведенного на складе
Спасибо за все ответы до сих пор - кажется, проблема с индексацией, все приведенные примеры были полезны - несмотря на несколько ошибок в запросе, но это помогло мне, некоторые из этих запросов выполнялись быстрее, но в сочетании с предложениями по индексам, я думаю, что сейчас я на правильном пути - спасибо за быстрые ответы - действительно помог мне и заставил задуматься о вещах, о которых я раньше не думал или не знал!
Индексы - это моя проблема, добавленная одна к внешнему ключу с заказами (клиент), и это
улучшил производительность, сократив время выполнения вдвое!
Похоже, я получил туннельное зрение и сосредоточился на запросе - я работаю с БД уже пару лет, но это было очень полезно. Однако, спасибо за все примеры запросов, они являются комбинациями и функциями, которые я не рассматривал, может быть также полезным!