У нас есть запрос SQL, который запускается с использованием механизма JET db для базы данных Access. К сожалению, мы не можем создать какие-либо хранимые процедуры или перейти на SQL Server, что было бы моим предпочтением. [Facepalm].
Проблема в том, что запрос очень медленный. Обработка запроса занимает около 2 минут, и мы должны выполнить это для 4 разных таблиц, поэтому его обработка занимает 8 минут. Когда мы запускаем каждый оператор select независимо, они занимают 1-2 секунды Когда мы собираем их вместе и используем предложение EXISTS, оно замедляется. У нас есть БД с двумя таблицами, первая таблица примерно 3000 строк, а вторая примерно 5000 строк. Мы хотим выбрать все строки в первой таблице, где значение (FieldName) существует в строке другой таблицы. Нам не нужны никакие поля из второй таблицы, только чтобы знать, что FieldName существует где-то в столбце VBScript. Я полагаю, что при написании этого слова он выполняет запрос ко всей второй таблице для каждой строки (3000 * 5000). Можно ли как-нибудь изменить этот запрос, чтобы он не выполнял столько поисков?
SELECT A1.*
FROM
(SELECT *
FROM tblEncompasstoCB CB
WHERE ((NOT CB.VBScript IS NULL) AND (CB.VBScript <> ''))) AS A1
WHERE
EXISTS (SELECT * FROM tblMapping
WHERE (tblMapping.VBScript <> '')
AND (InStr(tblMapping.VBScript, IIF(INSTR(A1.FieldName, '~') > 0, MID(A1.FieldName, 1, INSTR(A1.FieldName, '~') - 1), A1.FieldName)) > 0))
OR
EXISTS (SELECT * FROM tblCustomMapping
WHERE (tblCustomMapping.VBScript <> '')
AND (InStr(tblCustomMapping.VBScript, IIF(INSTR(A1.FieldName, '~') > 0, MID(A1.FieldName, 1, INSTR(A1.FieldName, '~') - 1), A1.FieldName)) > 0))