簡體   English   中英

形成此查詢的最佳方法

[英]Best Way to form this query

球隊,

我有三張桌子。

myTransTable,myMasterTable 1,MymyMasterTable 2

myTransTable有很多條目“ Rank.No”,自動縮進字段用於標識單個記錄。 “ U.Name”保存用戶名。 每個用戶在此表中可以有多個記錄。 但是可以通過Rank的最大值找到用戶的最新交易。按“ U.Name”分組后,否。

一旦獲得此最大記錄(即最近的事務),就需要從其他表中獲取其關聯數據

如何以最有效的方式做到這一點。

1.myTransTable(字段Rank.No(自動遞增字段),名稱,RecNum,uname,日期,類型)

2.myMasterTable1(RecNum,Recowner,recdate)

3.MymyMasterTable2(uName,age,address,contact num)

我嘗試了這些方法來選擇最大記錄並從其他表中獲取關聯的數據

  1. 最大記錄作為視圖並使用常規查詢從其他表中獲取數據
  2. 最大記錄和關聯數據本身作為視圖,並根據需要選擇數據

哪種方法可以縮短執行時間?

我的查詢是找到最大值的最佳方法。

選項一

select a.`RecNum`,a.`Name`,a.`Date`, a.`type`"+
            "from myTransTable a "+
            "INNER JOIN "+
            "(SELECT RecNumMAX(`Rank.No`) AS maxserialnum FROM myTransTable "+
            "GROUP BY RecNumMAX)groupedRecNumMAX "+
            " ON "+
            " a.RecNum = groupedPWO.RecNum  "+
            "AND "+
            "a.`Rank.No`  = groupedRecNumMAX.maxserialnum "+

選項二

Select a.`RecNum`,a.`Name`,a.`Date`, a.`type`"+` 
FROM                   from myTransTable a

WHERE                    s.`RecNum` in(select MAX(`RecNum`)
       from               myTransTable 
       group by       RecNum)

這只是一個建議,與您的第一個查詢有關..似乎包含對表和列名的錯誤引用

尋找代碼,您應該使用這樣的查詢

select a.`RecNum`
    ,a.`Name`
    ,a.`Date`
    , a.`type`
  from myTransTable a 
  INNER JOIN   (
      SELECT RecNum, MAX(`Rank.No`) AS maxserialnum 
      FROM myTransTable 
      GROUP BY RecNum 
  )  g ON  a.RecNum =g.RecNum  AND  a.`Rank.No`  = g..maxserialnum 

並在RecNum和Rank.No上使用適當的索引..應該是性能最高的(您可以通過簡單的測試和適當的執行測試來檢查解釋)

您不應該使用點名分隔的列名作為Rank.No ..使用Rank_No isteand並且對於列名也不要使用小寫字母,也不要混合使用UpperOrLower大小寫,請使用下划線代替單詞

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM