База данных - это SQL Server, и каждая таблица содержит около 5 - 50 миллионов записей. Это проект Laravel 5.8.

Я хочу иметь более быстрый поисковый запрос для данных в нескольких базах данных из SQL Server. Я только хочу получить результат и экспортировать его в CSV. В настоящее время запрос слишком медленный, если мой запрос превышает 3k ID, который может занять около 20 секунд +. Если что-то выше 3k, то оно достигнет максимальной ошибки 30 секунд выполнения.

Мой запрос выглядит так:

DB::connection('database')->select("
    SELECT id, value, value1, value3
    FROM (VALUES ('$manyId')) v(v)
    LEFT JOIN [a].[dbo].[a3] a ON a.id=v.v
    LEFT JOIN [b].[dbo].[b1] b ON b.id = a.id
    LEFT JOIN [b].[dbo].[b2] c ON c.id = b.id
    LEFT JOIN [b].[dbo].[b3] l ON l.id = b.id
    LEFT JOIN [b].[dbo].[b4] w ON w.id= l.id
    LEFT JOIN [b].[dbo].[b5] x ON x.id = c.id 
    LEFT JOIN [b].[dbo].[b6] y ON y.id = x.id
    WHERE ID IN ('$manyId')
    OR y.something LIKE '$something%'
    UNION ALL
    SELECT id, value, value1, value3
    FROM (VALUES ('$manyId')) v(v)
    LEFT JOIN [a].[dbo].[a3] a ON a.id=v.v
    LEFT JOIN [b].[dbo].[b1] b ON b.id = a.id
    LEFT JOIN [b].[dbo].[b2] c ON c.id = b.id
    LEFT JOIN [b].[dbo].[b3] l ON l.id = b.id
    LEFT JOIN [b].[dbo].[b4] w ON w.id= l.id
    LEFT JOIN [b].[dbo].[b5] x ON x.id = c.id 
    LEFT JOIN [b].[dbo].[b6] y ON y.id = x.id
    WHERE ID IN ('$manyId')
    OR y.something LIKE '$something%'
    UNION ALL
    SELECT id, value, value1, value3
    FROM (VALUES ('$manyId')) v(v)
    LEFT JOIN [a].[dbo].[a3] a ON a.id=v.v
    LEFT JOIN [b].[dbo].[b1] b ON b.id = a.id
    LEFT JOIN [b].[dbo].[b2] c ON c.id = b.id
    LEFT JOIN [b].[dbo].[b3] l ON l.id = b.id
    LEFT JOIN [b].[dbo].[b4] w ON w.id= l.id
    LEFT JOIN [b].[dbo].[b5] x ON x.id = c.id 
    LEFT JOIN [b].[dbo].[b6] y ON y.id = x.id
    WHERE ID IN ('$manyId')
    OR y.something LIKE '$something%'
    ");

Это может быть не самый эффективный запрос SQL. Если у кого-то есть лучшая идея по достижению того же результата с лучшим запросом SQL. Ценю, если вы можете поделиться знаниями со мной.

В заключение, я хотел бы иметь идентификатор 10k-50k ($ manyId) для каждой функции поиска, которая может завершиться в течение 10 секунд. Это возможно? Спасибо за любую помощь заранее.

1
CKW77