關於SQL最大值查詢語句的記錄
SELECT
BSNUM,
STATE AS FILE_STATE
FROM
file_record r
WHERE
EXISTS(
SELECT
BSNUM,
STATE
FROM
(
SELECT
BSNUM,
MAX(STATE) AS STATE
FROM
file_record
GROUP BY
BSNUM
) x
WHERE
r.BSNUM = x.BSNUM
AND r.STATE = x.STATE
)
簡單的看了一下這個語句,應該是想查出這個表中state值最大的業務對應的bsnum和state這兩個欄位的值。但是用原有的方法未免太麻煩,而且效率低下,於是優化了一下sql語句,改成這樣的:
將修改前後的兩個語句在資料量大的生產環境分別執行一下,發現查詢時間差距居然如此之大:SELECT bsnum, STATE AS FILE_STATE FROM FILE_RECORD r WHERE STATE =( SELECT MAX(STATE) FROM FILE_RECORD WHERE bsnum = r.bsnum );
之前只是知道,用第一種這樣的蠢蠢的查詢方式,效率很低,但是沒有想到二者差距這麼大。為什麼之前這裡沒有發現問題呢?因為一開始的時候資料量不是很大,所以倒是也沒有太影響系統使用。不過隨著資料量慢慢的變多,到現在已經有幾十萬條資料了,所以查詢速度自然就變得慢下來了。
相關推薦
關於SQL最大值查詢語句的記錄
這幾天在專案上遇到一個問題,說是一個業務列表的查詢很慢。記得之前這個功能並沒有遇到這個情況,而且根據客戶的描述,是最近一段時間開始變慢的。於是從後臺拿出了不知道是誰寫的sal語句,檢查了一下,發現其中
HDU 6191 2017廣西邀請賽Query on A Tree:可持久化01字典樹(區間抑或最大值查詢)
題意:給出一棵n(<=1e5)個點的樹,每個點有一個權,詢問q(<=qe5)次,每次詢問(nod,val),計算出以nod為根的子樹上的所有點,權抑或val的最大值是多少。 題解:基本上是個板子題吧。直接講方法了。。直接上DFS序+可持久化01字典樹就行了。可持
SQL多列查詢最大值
from val top 列數 ali group group by all 查詢 直接從某一列查詢出最大值或最小值很容易,通過group by字句對合適的列進行聚合操作,再使用max()/min()聚合函數就可以求出。 樣本數據如下: key_id x
ABAP 查詢數量最大值的記錄到內表
select matnr max( num ) from *** into corresponding fields of table i_mara group by matnr order by matnr.
SQL查詢按某欄位排序的最大值
1.建表 -- Create table create table FRUIT ( id VARCHAR2(20), name VARCHAR2(20), class VARCHAR2(20), count VARCHAR2(20),
sql查詢表中某個欄位值相同,其他欄位取最大值的記錄
SELECT a.* FROM user a WHERE not EXISTS( select 1 from user where name = a.name and age > a.age ) 對user表進行掃描,編號(或姓名)相同情況下,沒有比前邊年齡大
mybatis。插入語句如何插入資料庫中某一欄位最大值(純sql實現)
<insert id="inserts"> <selectKey keyProperty="ID" ORDER="BEFORE" resultType="java.lang.I
Hibernate hql查詢語句 Count:統計函式 Min:求最小值函式 Max:求最大值函式 Sum:求和函式 Avg:求平均數函式
在HQL中可以呼叫 Count:統計函式 Min:求最小值函式 Max:求最大值函式 Sum:求和函式 Avg:求平均數函式 Count:統計函式 Session session = HibernateSessionFactory.getSession(); Transaction tx = sess
資料庫排名sql,group by 分組查詢按照時間最大值
先給出類似的簡單表 DROP TABLE IF EXISTS `TouTiaoAnchor`; CREATE TABLE `TouTiaoAnchor` ( `HourId` int(10) unsigned NOT NULL, `BetinTime` varcha
SQL(oracle) 取得分組後最大值記錄
select * from (select t.*, row_number() over(partition by 分組欄位 order by 排序欄位 desc ) rn from tablename t ) where rn=1 row_number() OVER (PARTITION BY C
獲取數值型數組的最大值和最小值,使用遍歷獲取每一個值,然後記錄最大值和最小值的方式。(數組遍歷嵌套if判斷語句)
if判斷 增強 ++ pre sta 方法 最小值 test 記錄 package com.Summer_0420.cn; /** * @author Summer * .獲取數值型數組的最大值、最小值 * 方法:遍歷獲取每一個值,記錄最大值; *
MySql按字段分組取最大值記錄 [此博文包含圖片]
from htm 技術 方法 sin gid 最大值 count not 要求:獲得按table1_id分組,並且age最大的記錄信息,即2、3、5條 方法一: select * from (select * from table2 order by age
ARC096D Static Sushi 記錄前綴最大值
sum swap ont mes scan scanf amp 枚舉 ron 傳送門ARC096D 思路:枚舉 + 記錄前綴最大值 我們考慮先逆時針走。 枚舉逆時針的步數i,那麽我們先從0->n+1-i,然後回到起點n+1-i->0 然後順時針走,加上前綴最大值
lct樹上查詢最大值和路徑長
key fine ins def sca In amp col AC 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 #define
如何使用sql函數平均值、總數、最小值、最大值
first and sum count函數 round TP rom nvl 不包含 使用sql函數,您可以在一個select語句的查詢當中,直接計算數據庫資料的平均值、總數、最小值、最大值、總和、標準差、變異數等統計。使用recordset對象時,也可使用這些sql函數。
JavaScript內置對象Math查詢一組數中的最大值
最大值 定義 func 內置對象 .get scrip new i++ 查找 //查找一組數據中的最大值var result = Math.max(10, 20, 39, 40);alert(result);//自定義一個對象,實現系統方法max的方法function My
(java)leetcode852 山脈陣列的封頂索引(二分查詢法找出陣列中最大值的下標)(Peak Index in a Mountain Array)
題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A
請使用迭代查詢一個list中最小和最大值,並返回一個tuple:# 測試 if findMinAndMax([]) != (None, None): print('測試失敗!') elif findMinAndMax([7]) != (7, 7): print('測試失敗!&
def findminmax(L): a = [] if L != a: min = L[0] max = L[0] for i in L: if min > i: min = i
請使用迭代查詢一個list中最小和最大值,並返回一個tuple
自己寫個小程式玩,程式碼實現: def findMinAndMax(L): if len(L) == 0: return (None, None) else: mi = L[0] ma = L[0] f
在mysql 中查詢時間最大的一條記錄
首先如下這樣寫是錯的: SELECT name,MAX(last_updated) FROM digital_asset GROUP BY name; 這樣子查到的資料last_updated確實是最大的,但是和name沒有關係; 用這個方法可以實現: SELECT A.* F