Как оптимизировать TSQL-запрос?

«Активность» – это бит. Мне нужно установить значение true, если одна из строк с этим client_id имеет значение true

SELECT c.client_id, u.branch_id, a.account_id, activity FROM Clients c INNER JOIN accounts a ON c.id=a.client_id INNER JOIN uso u ON a.uso_id = u.uso_id, (SELECT MAX(CONVERT(int,accounts.activity)) as activity, client_id FROM accounts GROUP BY client_id) activ WHERE activ.client_id = c.id 

Этот запрос выполняется около 2 минут. Пожалуйста, помогите мне оптимизировать его.

Кажется, поле activity – это BIT и вы не можете сделать MIN или MAX на нем.

Вместо этого используйте TOP :

 SELECT c.client_id, u.branch_id, a.account_id, ( SELECT TOP 1 activity FROM accounts ai WHERE ai.client_id = c.id ORDER BY activity DESC ) FROM clients c JOIN accounts a ON c.id = a.client_id JOIN uso u ON a.uso_id = u.uso_id 

Создайте индекс для accounts (client_id, activity) чтобы это быстро работало.

Вы можете прочитать эту статью:

  • Минимальное и максимальное по битовым полям: SQL Server

Присоединяйтесь дорого. Вместо Join используйте memcache и делайте отдельные запросы.

Interesting Posts

Оптимизатор запросов не может использовать предикат прошлого накопителя? СОВЕТы также не работают

Термоусадочная и групповая колонка с использованием Pivot в SQL Server

Когда хранить индекс – анализ статичности использования индекса в SQL Server 2008

Ленивая загрузка с функцией импорта

Как получить план выполнения запросов?

Проблема с функцией окна в MSSQL 2008 R2

Вставка / обновление SQL-запросов для запятой разделителя запятой в NLS_NUMERIC_CHARACTERS

Использование переменных с GRANT и DENY в SQL Server 2005

Может ли серверные запросы sql быть действительно отменены / убиты?

T-SQL: диапазоны дат группы и установить дату окончания на основе столбца включения / выключения

Внешние ключи к составному ключу

Сервер Sql выполняет полное сканирование таблицы, когда первое поле в PK имеет несколько разных значений

Связывание текстовых полей C # SQL Server

Вычитание двух столбцов с помощью Null

Как написать SQL Pivot Query для этого сценария?

Давайте будем гением компьютера.