1

添付レコードを取得するために以下のサブクエリを使用しました。私はそれが私のタスク用に最適化されたクエリであることを知る必要があります(3か月以内に10,000を超えるレコードが存在するようです)。そのデータロードのサポートはありますか?

この以下のメソッドの代わりにJOINキーワードを使用できますか。これを整理するようにアドバイスしてください。現在、バックエンドとして postgresql を使用しています。

select worker,worktype,paymenttype,sum(output)as totalkgs_ltrs,sum(overkgs)as overkgs_ltrs,sum(workedhrs) as workedhrs,sum(scrap) as scrap,sum(cashworkincome) as cashworkincome,sum(pss) as pss
from (select
  comp.name as company, 
  est.name as estate, 
  div.name as division, 
  wkr.name as worker, 
  txn.date as updateddate, 
  txn.type as worktype, 
  txn.payment_type as paymenttype, 
  txn.names as workedhrs, 
  txn.norm as norm, 
  txn.output as output, 
  txn.over_kgs as overkgs, 
  txn.scrap as scrap, 
  txn.cash_work_income as cashworkincome,
  txn.pss as pss
from 
  bpl_daily_transaction_master txn, 
  res_company comp, 
  bpl_division_n_registration div, 
  bpl_estate_n_registration est, 
  bpl_worker wkr
where 
  comp.id = txn.bpl_company_id and
  div.id  = txn.bpl_division_id and
  est.id  = txn.bpl_estate_id and
  wkr.id  = txn.worker_id
)as subq
group by worker,worktype,paymenttype

ここに、このクエリを実行したときの結果が表示されます

この画像を参照してください

サブクエリのコードと結果は、下部のセクションにタグ付けされています

select
  comp.name as company, 
  est.name as estate, 
  div.name as division, 
  wkr.name as worker, 
  txn.date as updateddate, 
  txn.type as worktype, 
  txn.payment_type as paymenttype, 
  txn.names as workedhrs, 
  txn.norm as norm, 
  txn.output as output, 
  txn.over_kgs as overkgs, 
  txn.scrap as scrap, 
  txn.cash_work_income as cashworkincome,
  txn.pss as pss
from 
  bpl_daily_transaction_master txn, 
  res_company comp, 
  bpl_division_n_registration div, 
  bpl_estate_n_registration est, 
  bpl_worker wkr
where 
  comp.id = txn.bpl_company_id and
  div.id  = txn.bpl_division_id and
  est.id  = txn.bpl_estate_id and
  wkr.id  = txn.worker_id

これはメインのクエリ結果の上にあり、すべてのレコードが表示されます

この画像を参照してください

4

1 に答える 1

2
select wkr.name as worker,txn.type as worktype,txn.payment_type as paymenttype,sum(txn.output)as totalkgs_ltrs,sum(txn.over_kgs)as overkgs_ltrs,
       sum(txn.names) as workedhrs,sum(txn.scrap) as scrap,sum(txn.cash_work_income) as cashworkincome,sum(txn.pss) as pss

from 
  bpl_daily_transaction_master txn
inner join res_company comp
   on comp.id = txn.bpl_company_id 
inner join bpl_division_n_registration div
   on div.id  = txn.bpl_division_id
inner join bpl_estate_n_registration est
   on est.id  = txn.bpl_estate_id
inner join bpl_worker wkr
   on wkr.id  = txn.worker_id

group by wkr.name,txn.type,txn.payment_type

サブクエリで行っているのは、推奨されないテーブルを結合するための古い ANSI SQL -89 構文です。しかし、パフォーマンスに関する限り、このstackoverflowスレッドで確認されているように違いはないと思います。

Peter Gulutzan と Trudy Pelzer による「SQL Performance Tuning」によると、テストした 6 つまたは 8 つの RDBMS ブランドのうち、SQL-89 と SQL-92 スタイルの結合の最適化またはパフォーマンスに違いはありませんでした。ほとんどの RDBMS エンジンは、クエリを最適化または実行する前に構文を内部表現に変換すると想定できるため、人間が判読できる構文に違いはありません。

于 2013-05-17T05:25:55.063 に答える