0
ここでは、内部テーブルSEARCHED_TAGSとUSERテーブルを結合しようとしています。ここでは、同じ結合を3回使用します。これだけでなく、このクエリを何度も使用します。クエリが遅くなる原因はありますか&このクエリを3回ではなく1回書くことができますか?1つの内部結合を追加する方法3つの内部結合の代わりに
以下はクエリです。
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
inner join USER usr
on st.SEARCH_BY=usr.USER_ID
where (st.SEARCH_TEXT like :tagText) and (st.SEARCH_BY = :userId) and (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
UNION
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
inner join USER usr
on st.SEARCH_BY = usr.USER_ID
where (st.SEARCH_TEXT like :tagText) and not (st.SEARCH_BY = :userId) and (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
UNION
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
inner join USER usr
on st.SEARCH_BY= usr.USER_ID
where (st.SEARCH_TEXT like :tagText) and not (st.SEARCH_BY = :userId) and not (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
上記の代わりにこのように記述できますか?
inner join USER usr
on st.SEARCH_BY=usr.USER_ID
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
where (st.SEARCH_TEXT like :tagText) and (st.SEARCH_BY = :userId) and (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
UNION
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
where (st.SEARCH_TEXT like :tagText) and not (st.SEARCH_BY = :userId) and (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
UNION
(
select st.SEARCH_TEXT as SEARCH_TEXT
from SEARCHED_TAGS st
where (st.SEARCH_TEXT like :tagText) and not (st.SEARCH_BY = :userId) and not (usr.DEP_ID = :userDep)
order by st.SEARCH_TIME desc
limit 2
)
おかげ..ため、制限文の
@philipxy醜さは、私が思う限界文から来ています。 –
あなたのクエリ以外の方法で何をしようとしているのか、あなたの質問がおそらくそれをしていないように思われるので、助けになります。また、[mcve]を読んで行動してください。 – philipxy