日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL 使用自定義變量進行查詢優化

瀏覽:28日期:2023-10-03 08:58:26
目錄優化排序查詢避免重復獲取剛剛修改的數據行懶加載的聯合查詢優化排序查詢

自定義變量的一個重要特性是你可以同時將該變量的數學計算后的結果再賦值給該變量,類似于我們的 i = i + 1這種方式。下面是一個用于計算數據表行號的例子:

SET @rownum := 0;SELECT actor_id, @rownum := @rownum + 1 AS rownumFROM sakila.actor LIMIT 3;

actor_id rownum 1 1 2 2 3 3

得到的結果也許看起來沒什么意義,這是因為主鍵是從1自增的,因此行號和主鍵值是一樣的。但是,這種方式可以用于做排序。例如需要查詢飾演電影數量最多的前10名演員,通常的做法是像下面這樣寫:

SELECT actor_id, COUNT(*) as cntFROM sakila.film_actorGROUP BY actor_idORDER BY cnt DESCLIMIT 10;

得到的結果也許看起來沒什么意義,這是因為主鍵是從1自增的,因此行號和主鍵值是一樣的。但是,這種方式可以用于做排序。例如需要查詢飾演電影數量最多的前10名演員,通常的做法是像下面這樣寫:

SELECT actor_id, COUNT(*) as cntFROM sakila.film_actorGROUP BY actor_idORDER BY cnt DESCLIMIT 10;

如果我們要獲得相應的排名值的話,則可以引入變量來完成:

SET @curr_cnt := 0, @prev_cnt := 0, @rank := 0;SELECT actor_id,@curr_cnt := cnt AS cnt, @rank := IF(@prev_cnt <> @curr_cnt, @rank+1, @rank) as rank, @prev_cnt:= @curr_cnt AS dummyFROM ( SELECT actor_id, COUNT(*) AS cnt FROM sakila.film_actorGROUP BY actor_idORDER BY cnt DESCLIMIT 10) as der;

這里是將飾演電影的數量賦值給了 curr_cnt 變量,使用了prev_cnt 存儲前一個演員的參演數量。排名從第一名開始的,如果后面的演員的數量和前一個演員的數量不同,則排名要往下(+1),如果相同則和前一個演員的排名相同。通過這種方式可以直接從查詢結果中得到演員的排名,而不需要再從數據庫查詢做二次處理(當然也可以通過程序代碼實現)。

避免重復獲取剛剛修改的數據行

如果想在更新數據行的時候再重新獲取數據行的信息,往往需要再讀取一次數據庫。這是因為 MySQL 不像 PostgreSQL 的 UPDATE RETURNING 功能可以同時返回更新后的數據行,而只是返回更新影響的行數。但是,我們可以通過自定義變量完成這樣的操作。例如,獲取剛剛被修改過更新時間的行,不使用自定義變量的話需要做一次額外的查詢:

UPDATE tb1 SET lastUpdated = NOW() WHERE id = 1;SELECT lastUpdated FROM tb1 WHERE id = 1;

而使用自定義變量的時候可以避免這種情況:

UPDATE tb1 SET lastUpdated = NOW() WHERE id = 1 AND @now := NOW();SELECT @now;

雖然還是有一個查詢操作,但是后面的查詢操作不再需要訪問數據庫了。

懶加載的聯合查詢

假設我們需要寫一個聯合查詢完成如下任務:在聯合的分支上查找匹配的數據行,如果找到了就跳過其他分支。y這種情況發生在需要從熱區數據或低頻訪問數據中查找(比如近期訂單和歷史訂單)。這是下面針對用戶查詢的一個普通的 SQL:

SELECT id FROM users WHERE id = 123UNION ALLSELECT id FROM users_archived WHERE id = 123;

這個查詢會先從當前正在使用的用戶表查詢 id 為123的用戶,然后 在從已歸檔的用戶表找同樣 id 的用戶。但是,這種寫法比較低效,即便是在 users 表找到了想要找的用戶,還是需要從users_archived 這個表再找一次,而實際用戶 id 為123的只會存在其中的一張表中或兩張表的數據是一樣的。通過懶加載的聯合查詢,可以避免這種情況——只有在第一個分支沒有找到數據時才進行第二個分支的查詢。因此可以使用 MySQL 的 GREATEST 方法來作為查詢結果的容器以避免多返回數據列。

SELECT GREATEST(@found := -1, id) AS id, users.name, ’users’ as which_tb1FROM users WHERE id = 123UNION ALLSELECT id, users_archived.name, ’users_archived’ FROM users_archived WHERE id = 123 AND @found IS NULLUNION ALLSELECT 1, ’’, ’reset’ FROM DUAL WHERE ( @found := NULL) IS NOT NULL;

上述的查詢如果第一行有結果,則@found 不會被賦值,因而是 NULL,從而執行第二次查詢。而第三次的 UNION 實際沒什么效果,只是為了將@found恢復到 NULL 值,以便這段 SQL 可以重復執行。另一個驗證的方法是對同一張表進行這樣的操作,可以發現實際只會返回一行數據或不返回數據(查詢不到數據時)。

SELECT GREATEST(@found := -1, `id`) AS `id`, `infocenter_city`.`name`, ’city’ as which_tb1 FROM `infocenter_city` WHERE `id` = 460100 UNION ALL SELECT `id`, `infocenter_city`.`name`, ’infocenter_city’ FROM `infocenter_city` WHERE id = 460100 AND @found IS NULL UNION ALL SELECT 1, ’’, ’reset’ FROM DUAL WHERE ( @found := NULL) IS NOT NULL

以上就是MySQL 使用自定義變量進行查詢優化的詳細內容,更多關于MySQL 用自定義變量進行查詢優化的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩毛片一区| 亚洲自拍另类| 日韩二区三区在线观看| 99国产一区| 性一交一乱一区二区洋洋av| 狠狠爱成人网| 免费人成网站在线观看欧美高清| 亚洲综合日本| 午夜精品网站| 美女久久一区| 久久精品xxxxx| 国产成人精品一区二区三区免费| 久久午夜影院| 日韩精品免费一区二区在线观看 | 丝袜美腿亚洲一区| 亚洲日本在线观看视频| 国产精品扒开腿做爽爽爽软件| 国产一区二区三区网| 91精品一区二区三区综合在线爱| 九九久久电影| 久久亚洲色图| 国产精品2023| 亚洲精品一级二级| 综合国产精品| 欧美精品高清| 日韩av二区在线播放| 中文字幕人成乱码在线观看| 欧洲av一区二区| 亚洲小说春色综合另类电影| 麻豆久久一区| 国产精品毛片在线| 精品免费在线| 中文字幕成人| 欧美日韩中文一区二区| 欧美日一区二区在线观看| 国产极品嫩模在线观看91精品| 蜜桃视频在线网站| 欧美日一区二区在线观看| 亚洲天堂久久| 精品国产亚洲一区二区三区| 久久av一区| 日韩和的一区二在线| 久久99青青| 午夜久久av | 日韩黄色大片网站| 国产日产高清欧美一区二区三区| 国产专区精品| 亚洲人成网77777色在线播放 | 亚洲黄色在线| 97国产成人高清在线观看| 日韩一区二区三免费高清在线观看| 日韩免费看片| 精品美女视频 | 日韩高清中文字幕一区| 亚洲精品一区三区三区在线观看| 婷婷成人av| 影院欧美亚洲| 国内精品福利| 欧美aa在线观看| 精品国产第一福利网站| 国产伦精品一区二区三区千人斩 | 麻豆网站免费在线观看| 国产精品对白| 国产免费久久| 欧美激情aⅴ一区二区三区| 日本中文字幕一区二区视频| 亚洲欧洲国产精品一区| 99精品在线观看| 欧美特黄a级高清免费大片a级| 91精品精品| 国产一级一区二区| 亚洲午夜免费| 欧美视频一区| 成人高清一区| 久久国产直播| 伊人久久大香线蕉av超碰演员| 影院欧美亚洲| 91免费精品国偷自产在线在线| 国产亚洲精品美女久久 | 久久伦理在线| 少妇精品久久久一区二区三区| 日韩高清一区二区| 麻豆成人在线观看| 久久婷婷激情| 一区二区精彩视频| 狂野欧美性猛交xxxx| 日韩黄色大片网站| 免费日韩av片| 久久久久久亚洲精品美女| 日韩不卡免费高清视频| 中文不卡在线| 国产精品99久久精品| 99综合视频| 国产精品久久亚洲不卡| 麻豆成全视频免费观看在线看| 亚洲一级二级| 久久国产欧美日韩精品| 欧美gv在线| 亚洲毛片在线| 精品国产不卡| 丝袜a∨在线一区二区三区不卡| 欧美日韩在线精品一区二区三区激情综合| 精品国产欧美日韩一区二区三区| 99视频+国产日韩欧美| 激情不卡一区二区三区视频在线| 亚洲欧美日本国产专区一区| 久久只有精品| 亚洲无线观看| 成人影视亚洲图片在线| 中文字幕av亚洲精品一部二部| 亚洲va中文在线播放免费| 久久精品 人人爱| 亚洲一区黄色| 蜜桃精品在线| 毛片不卡一区二区| 国产探花一区| 日韩精品久久理论片| 亚洲午夜黄色| 亚洲天堂1区| 国产专区精品| 老司机免费视频一区二区三区| 亚洲涩涩av| 麻豆精品网站| 国产午夜精品一区二区三区欧美| 韩日一区二区| 黄色在线网站噜噜噜| 精品国产欧美| 麻豆国产精品视频| 久久99精品久久久野外观看| 天堂va欧美ⅴa亚洲va一国产| 久久狠狠婷婷| 极品日韩av| 五月天久久久| 亚洲一区二区三区高清| 美女91精品| 亚洲欧洲av| 国产亚洲精品美女久久久久久久久久| 综合精品一区| 国产日韩精品视频一区二区三区| 妖精视频成人观看www| 亚洲一区日韩在线| 中文字幕视频精品一区二区三区| 中文日韩欧美| 日韩精品视频网站| 国产精品v一区二区三区| 欧美国产极品| 桃色av一区二区| 国产亚洲精品v| 日韩高清不卡一区| 国产在线一区不卡| 黄色免费成人| 91国内精品| 国产在线|日韩| 亚洲v天堂v手机在线| 国产精品久久久久77777丨| 国产一区二区三区精品在线观看| 国产福利片在线观看| 亚洲激情精品| 国产乱子精品一区二区在线观看| 不卡一二三区| 视频在线观看一区| 国产精东传媒成人av电影| 天堂√中文最新版在线| 一区二区不卡| 国产黄大片在线观看| 蜜臀精品一区二区三区在线观看 | 欧美三级网址| 美女精品在线观看| 黄色网一区二区| 图片区亚洲欧美小说区| 免费日韩成人| 亚洲一区二区动漫| 中文字幕在线官网| 亚洲tv在线| 激情偷拍久久| 97精品在线| 国产精品美女在线观看直播| 欧美 日韩 国产一区二区在线视频| 欧美日韩一区自拍| 日韩欧美不卡| 国产精品xxx在线观看| 三级在线观看一区二区| 久久国产中文字幕| 国产一区福利| 国产激情久久| 日韩精品亚洲专区| 亚洲一区欧美二区| 久久在线免费| 中文字幕人成乱码在线观看 | 国产精品网站在线看| 亚久久调教视频| 在线精品亚洲| 在线日韩一区| 亚洲女同av| 日韩久久精品| 高潮久久久久久久久久久久久久| 欧美日韩在线精品一区二区三区激情综合 | 精品亚洲精品| 久久中文精品| 久久中文字幕一区二区三区|