• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQLの高速化)

SQLの高速化

このQ&Aのポイント
  • 重複結果が出力されてしまうクロス結合の問題を解決する方法
  • ARCHIVE_ORDERとARCHIVE_SAMPLEのデータサイズによるパフォーマンス低下を解消する方法
  • 指定の条件で高速な結果を出力するARCHIVE_SAMPLEの検索方法

質問者が選んだベストアンサー

  • ベストアンサー
  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

前回の回答を転載しておきます。 > SELECT [mの全てのフィールドの列挙] > FROM Archive_Sample m JOIN Archive_Order o >     ON m.ArchiveID=o.ArchiveID AND m.Order_Sampleid=o.Order_SampleID > WHERE UPPER(o.Order_PatientID) LIKE '%234%' SELECTの後ろにDISTINCTをつけてください。

その他の回答 (2)

回答No.3

【ARCHIVE_SAMPLE】 ArchiveID Order_SampleID 1     2 2     1 【ARCHIVE_ORDER】 ArchiveID Order_SampleID 1     1 2     2 こういうデータがあると抽出結果は2件になっていいんですか? やりたいことはこうじゃないんですかね?? SELECT M.* FROM ARCHIVE_SAMPLE M WHERE EXISTS ( SELECT AO.ArchiveID, AO.Order_SampleID FROM ARCHIVE_ORDER AO WHERE AO.Order_PatientID LIKE '%234%' AND M.ArchiveID = AO.ArchiveID AND M.Order_SampleID = AO.Order_SampleID ) また、LIKEでUPPER()を利用していますが、不要、かつカラムに指定することで インデックスが利かなくなります。

  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

前回のSQLは決してクロス結合ではないですが・・・。 データの関連性の問題ですよね。 で、別解としてEXISTSを使ってはどうでしょうか。 SELECT * FROM ARCHIVE_SAMPLE M WHERE EXISTS ( SELECT * FROM ARCHIVE_ORDER O WHERE M.ArchiveID = O.ArchiveID AND M.Order_SampleID = O.Order_SampleID AND UPPER(Order_PatientID) LIKE UPPER('%234%') );

関連するQ&A