800+ records requires about 5 minutes
= проблема запроса.
посмотрите на ваш план выполнения:
В SSMS запустите:
SET SHOWPLAN_ALL ON
затем запустите ваш запрос, он не выдаст ожидаемый набор результатов, а план исключения из того, как база данных извлекает ваши данные. Большинство плохих запросов обычно сканируют таблицу (посмотрите на каждую строку в таблице, что медленно), поэтому ищите слово «SCAN» в столбце StmtText
. Попытайтесь выяснить, почему индекс не используется в этой таблице (имя будет там под словом "SCAN"). Если вы объединяете несколько таблиц и имеете несколько SCAN, сначала сконцентрируйтесь на самых больших таблицах.
Без дополнительной информации это лучшая «общая» помощь, которую вы можете получить.
EDIT
Прочитав ваш вопрос, я не уверен, что вы имеете в виду, что он всегда быстрый из SSMS независимо от строк, но медленный из VB по мере увеличения строк. Если это так, проверьте это: http://www.google.com/search?q=sql+server+fast+from+ssms+slow+from+application&hl=en&num=100&lr=&ft=i&cr=&safe=images
может быть что-то вроде: сниффинг параметров или несогласованные параметры соединения (нули ANSI, arithabort и т. Д.)
для настроек соединения, попробуйте запустить их из SSMS и из VB6 (добавьте их в набор результатов) и посмотрите, есть ли различия:
SELECT SESSIONPROPERTY ('ANSI_NULLS') --Specifies whether the SQL-92 compliant behavior of equals (=) and not equal to (<>) against null values is applied.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('ANSI_PADDING') --Controls the way the column stores values shorter than the defined size of the column, and the way the column stores values that have trailing blanks in character and binary data.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('ANSI_WARNINGS') --Specifies whether the SQL-92 standard behavior of raising error messages or warnings for certain conditions, including divide-by-zero and arithmetic overflow, is applied.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('ARITHABORT') -- Determines whether a query is ended when an overflow or a divide-by-zero error occurs during query execution.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('CONCAT_NULL_YIELDS_NULL') --Controls whether concatenation results are treated as null or empty string values.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('NUMERIC_ROUNDABORT') --Specifies whether error messages and warnings are generated when rounding in an expression causes a loss of precision.
--1 = ON
--0 = OFF
SELECT SESSIONPROPERTY ('QUOTED_IDENTIFIER') --Specifies whether SQL-92 rules about how to use quotation marks to delimit identifiers and literal strings are to be followed.
--1 = ON
--0 = OFF
сделайте ваш запрос похожим (чтобы вы могли видеть настройки соединения в VB6):
SELECT
col1, col2
,SESSIONPROPERTY ('ARITHABORT') AS ARITHABORT
,SESSIONPROPERTY ('ANSI_WARNINGS') AS ANSI_WARNINGS
FROM ...