Member 12955507 Ответов: 1

Как улучшить перманентность запроса select ?


Я снова застрял с производительностью запросов к базе данных..

Один запрос Select-занимает много времени для выполнения - 7 минут для 30 записей.

Что я уже пробовал:

select distinct incoming.IC_NO,
(case when ISNUMERIC(incoming.IC_RECEIVERS_SR_ID) <> 1 then incoming.IC_RECEIVERS_SR_ID when ISNUMERIC(incoming.IC_RECEIVERS_SR_ID) = 1
then (select sr.SR_NAME from SENDERRECEIVER sr where sr.SR_ID = cast( incoming.IC_RECEIVERS_SR_ID as numeric) )end) as 'IC_RECEIVERS_SR_ID',
(select courier.CSP_NAME from COURIERSERVICEPROVIDER courier where courier.CSP_ID = incoming.IC_CSP_ID) as 'Courier Service Name',
equip.EQ_DESC as 'Site',
(select REPLACE(t.EQ_DESC,'–','') from EQUIPMENT t where t.EQ_L1 = equip.eq_code and t.EQ_LEVEL = 2 and incoming.IC_SUBHUBLOC = t.EQ_CODE) as 'Subhurb',
incoming.IC_WEIGHT, incoming.IC_RATE , incoming.IC_CONSIGNMENTRECDATETIME,
incoming.IC_ReceiverCity as 'Receiver City',
incoming.IC_RECEIVERPINCODE as 'Receiver Pincode',
incoming.IC_AIRWAYBILLNO as 'Airway Bill No',
incoming.IC_AMOUNT as 'Amount', incoming.IC_CREATEDBY as 'Created By',
incoming.IC_COURIERTYPE as 'Courier Type'
from INCOMINGCONSIGNMENT incoming , equipment equip,
equipment subhurb where 1=1 and IC_CONSIGNMENTRECDATETIME between '03 Jul 2017' and '03 Jul 2017' 


Пожалуйста, помогите мне...

F-ES Sitecore

Используйте соединения, а не подзапросы для получения данных из других таблиц (например, название курьерской службы и т. д.). Кроме того, посмотрите на план запросов через SQL Management Studio и, возможно, постройте индексы на столбцах, включенных в запросы "где", однако это может иметь эффект детонации с производительностью вставки.

Настройка запросов-это огромная тема сама по себе, много статей там, если вы погуглите.

1 Ответов

Рейтинг:
0

mike14021

какая база данных? SQL сервер ? оракул ? что-нибудь еще ?

если sqlserver включает фактический план выполнения и расчетный план выполнения - если какой-либо индекс отсутствует, sql server отобразит команду для создания отсутствующего индекса

кейс и гипс действительно нужны ? должно быть сделано в клиенте (c#, vb ...) база данных предназначена для извлечения данных, а не для вычисления

подзапрос может быть медленнее, чем присоединение