2016-08-02 3 views
2

Я пытаюсь работать с файлом .mdb около 15k + записей. Я использую ado в vbscript и asp запрашиваю базу данных. Запрос, который я делаю, выглядит примерно так. x в этом случае является просто переменной, которая содержит текущую дату в форме mm/dd/yyyy.Слишком длинный запрос доступа

rs.Open "SELECT [Item Number], [Qty], [Delivery Point] 
    FROM [ItemBoard] 
    WHERE format([Submitted Date/Time], 'mm/dd/yyyy') = '"&x&"' 
     AND [OrderUrgency] = 'Rush' 
     AND ([Delivered] is NOT NULL OR [Delivered Short] is NOT NULL)", conn 

Моя проблема заключается в том, что этот запрос занимает более одной минуты для завершения, что слишком высоко. Более того, если я изменяю предложение Where, чтобы иметь только одну из трех статусов, а не все три из них, время завершения запроса сокращается примерно до 50-55 секунд. Существуют ли какие-либо вероятные кандидаты на причины этой проблемы помимо структуры самой базы данных?

+3

Формат 'WHERE ([Дата отправки/время], 'mm/dd/yyyy') =', механизм db не может использовать индексированный поиск для '[Date Date/Time]'. Если это поле является типом даты/времени, выполните сравнение даты вместо сравнения строк и убедитесь, что поле индексировано. Если этого недостаточно, покажите нам, что такое 'x'. – HansUp

+0

@HansUp Я могу добавить разъяснение x в свой пост и, безусловно, сделаю это улучшение, но, как я сказал выше, даже если я оставлю это из предложения where, я все равно получаю 50-55 секундное время завершения. – Naiya55

+1

Aha. Когда вы сказали, что «есть только одна из трех статуй», вы не сказали, какой из них. Затем используйте '[Date Date/Time] = Date()' и убедитесь, что индексируются как '[Date Date/Time], так и' [OrderUrgency] '. Если этого недостаточно, я бы переключился с ADO на DAO. – HansUp

ответ

0

Хотя все предложения улучшили мое время выполнения, это то, что дало мне лучшее время, не меняя того, что я искал.

rs.Open "SELECT [Item Number], [Qty], [Delivery Point] 
FROM [ItemBoard] 
WHERE [Submitted Date/Time] >= Date() AND [Submitted Date/Time] < DateAdd('d', 1, Date()) 
    AND [OrderUrgency] = 'Rush' 
    AND ([Delivered] is NOT NULL OR [Delivered Short] is NOT NULL)" 

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

Смежные вопросы