SQL Serverはjoin allを使って速度を最適化します。


例えば、マスター、testは、そのユーザーがtestの下位コードであることを表しています。test登録後、test名義の業務とすべての下級代理の業務が見られます。関連表の構成は以下の通りです。

user    10    
|-uid-|-user-|----site------|
| 1 | test | ,master,   |
| 2 | user | ,master,test,|
 
product    30    
|-pid-|-product-|-puser-|
| 1 | order01 | test |
| 2 | order02 | user |
| 3 | order03 | user |
最適化前のSQL文は以下の通りです。

select * from product as p left join user as u on p.puser=u.user where user='test' or site like '%,test,%'
使用しないor単独で検索する場合は、100ミリ秒を超えず、索引の問題を除外します。単一で大丈夫である以上、二つの結果は重複記録が存在しないので、join all最適化を考慮することができる。
最適化された語句は以下の通りです。

select * from product where pid in (
  select pid from product where user='test' join all (
    select pid from product as p left join user as u on p.puser=u.user where site like '%,test,%'
  )
)
ユーザーAの名義は全部で4000+の業務があります。最適化前に11359ミリ秒を最適化し、621ミリ秒後に最適化します。
ユーザーBの名義は全部で12の業務があります。最適化前に10399ミリ秒、最適化後78ミリ秒です。
ここではSQL Serverについてjoin allを使って、お問い合わせ速度を最適化した文章を紹介します。SQL Server join allの最適化内容については、以前の文章を検索したり、下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。