Производительность настроить мой SQL-запрос удаления операторов ИЛИ - PullRequest
0 голосов
/ 21 апреля 2010

Мне нужно настроить производительность после запроса SQL, удалив операторы "ИЛИ"

Пожалуйста, помогите ...

SELECT a.id, a.fileType, a.uploadTime, a.filename, a.userId, a.CID, ui.username, company.name  companyName, a.screenName
FROM TM_transactionLog  a, TM_userInfo  ui, TM_company  company, TM_airlineCompany  ac 
WHERE 
(           
  a.CID = 3049
)
OR       
( 
  a.CID = company.ID 
   AND 
  ac.SERVICECID = 3049 
   AND
  company.SPECIFICCID = ac.ID 
)
OR
(
  a.USERID = ui.ID
   AND
  ui.CID = 3049
);

Ответы [ 2 ]

1 голос
/ 21 апреля 2010

Вы уверены, что это запрос, который вы хотите? Вы знаете, что первое условие ИЛИ даже не определило соединение, поэтому оно будет выполнять декартово соединение для всех таблиц. Я не уверен, что это так, и вы не ожидаете, что критерии соединения будут выполнены для этого условия ИЛИ. Потому что, похоже, ваши столбцы выбора из нескольких таблиц предполагают, что вы ожидаете какое-то соединение, и если это так, вам следует начать с запроса, который выглядит следующим образом ..

SELECT a.id,
       a.filetype,
       a.uploadtime,
       a.filename,
       a.userid,
       a.cid,
       ui.username,
       company.name companyname,
       a.screenname
FROM   tm_transactionlog a,
       tm_userinfo ui,
       tm_company company,
       tm_airlinecompany ac
WHERE  a.userid = ui.id
       AND a.cid = company.id
       AND company.specificcid = ac.id
       AND ( a.cid = 3049
              OR ac.servicecid = 3049
              OR ui.cid = 3049 ); 

А что касается оптимизации этого запроса, я думаю, что очень мало возможностей для оптимизации без изменения модели данных. Если у вас уже нет индексов, я бы предложил создать составной индекс (a.userid, a.cid <- столбец с большим количеством элементов должен идти первым), а индексы - ac.cservicecid, company.specificcid & ui .cid. </p>

0 голосов
/ 21 апреля 2010

Было бы очень полезно увидеть структуру таблицы для этого - я уверен, что вы можете удалить большую часть кода предложения WHERE, присоединив ваши таблицы.

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