База данных - это 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 секунд. Это возможно? Спасибо за любую помощь заранее.
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.