MS-доступ, упрощающий код SQL - PullRequest
0 голосов
/ 27 октября 2009

это хороший код? это можно как-то упростить?

    SELECT u.id,u.title,u.title,u.first,u.last FROM 
  (((tblusers u LEFT JOIN tbluserstudentteacher 
     ON u.id = tbluserstudentteacher.student_teacher_user_id) 
     LEFT JOIN tblUsersSubjects ON u.id = tblUsersSubjects.user_id) 
     LEFT JOIN tblUserAvailability ON u.id=tblUserAvailability.user_id) 
     LEFT JOIN chavrusas ON u.id=chavrusas.luser_id 
       WHERE 1=1 AND (u.gender) LIKE 'm*' 
       AND (chavrusas.luser_type)='shliach' 
       AND (chavrusas.ruser_type)='shliach' AND (u.last LIKE 'd*') 
 GROUP BY u.id, u.title, u.title, u.first, u.last 
 ORDER BY last;

Ответы [ 5 ]

3 голосов
/ 27 октября 2009

Вы делаете это неправильно. Посмотрите на все ответы, уже предоставленные.

Перейти в код.

Вносить необходимые изменения для загрузки только необходимых данных и только при необходимости.

Узнайте, почему групповые случаи могут причинять боль, если не требуется, и как могут помочь ОТЛИЧИЯ.

Как ВЫ можете упростить запрос?

1 голос
/ 27 октября 2009

Абрашка, есть несколько вещей, которые вы можете посмотреть, чтобы оптимизировать код SQL выше. Если возможно, я бы порекомендовал денормализовать схему таблиц для задействованных таблиц, чтобы помочь уменьшить количество выполняемых объединений, а также избавиться от этой ненужной группировки по предложению. Заявления LIKE также снижают производительность, поэтому вы можете пересмотреть их использование.

1 голос
/ 27 октября 2009

Из моего ответа на ваш другой вопрос , где я тоже его убрал. Смотрите этот пост для обсуждения почему.

SELECT u.id, u.title, u.first, u.last
  FROM (tblusers u LEFT JOIN chavrusas c ON u.id = c.luser_id
  AND u.gender LIKE 'm*'
  AND u.last LIKE 'd*'
  AND c.luser_type = 'shliach'
  AND c.ruser_type = c.luser_type)
ORDER BY last;
1 голос
/ 27 октября 2009

Похоже, что-то сгенерировано из интерфейса Access Query-Builder. Это может быть упрощено, но я думаю, что вы должны сначала понять, где используется код и чего он пытается достичь, прежде чем изменять его.

Кроме того, если вы не потребляете МНОГО ресурсов, вы действительно не хотите начинать преждевременную оптимизацию.

0 голосов
/ 02 ноября 2009

Не выглядит слишком плохо для меня. Некоторые предложения:

  • Хорошее форматирование, например право выравнивания ключевые слова запроса для создания «трубы» и отступ в предложении ON для нового линия.
  • Используйте ключевое слово AS перед корреляция имени.
  • Используйте ключевое слово DISTINCT вместо группировка по всему предложению SELECT (лучше передает намерение).
  • Убрать предикаты «фильтрации» объединения и в предложение WHERE.
  • Удалите символы.
  • Удалите предикат 1=1 и используйте параметризованный PROCEDURE, а не динамический SQL;)

Примерно так:

SELECT DISTINCT u.id, u.title, u.first, u.last
  FROM tblusers AS u 
       LEFT OUTER JOIN chavrusas AS c 
          ON u.id = c.luser_id
             AND c.ruser_type = c.luser_type
 WHERE u.gender LIKE 'm*'
       AND u.last LIKE 'd*'
       AND c.luser_type = 'shliach'
 ORDER 
    BY last;

Также просмотрите ваш SQL DDL. Есть ли у пользователя «пол» (мужской, женский, средний и т. Д.) Или пол ( ISO 5218 )?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...