1. 程式人生 > >Mysql 子查詢效率優化

Mysql 子查詢效率優化

一、MySQL子查詢的位置

       當一個查詢是另一個查詢的子部分是,稱之為子查詢(查詢語句中巢狀含有查詢語句)。子查詢也是使用頻率比較高的一種查詢型別。因此,優化子查詢,對於整個系統的效能也有直接的影響。

       從查詢出現在SQL語句的位置來看,它可以出現在目標列中,也可以出現在from子句中,還可以出現在JOIN/ON子句、GROUPBY子句、HAVING子句、ORDERBY子句等位置。下面依次來看這幾種形式的子查詢,以及對他們進行優化的一些想法。

1、子查詢出現在目標列位置

       當子查詢出現在目標列位置的時候,這種查詢只能是標量子查詢。也就是說子查詢返回的結果只能是一個元組的一個屬性。否則,資料庫會返回錯誤資訊。

       下面為了實驗上面這段話,我們來新建一些表,並插入一些資料。

1 2 3 create table t1 (k1 int primary key, c1 int); create table t2 (k2 int primary key, c2 int); insert into t2 values (1, 10), (2, 2), (3,30);

a此時若我們執行如下SQL語句的結果為:

1 2 mysql> 
select t1.c1, (select t2.c2 from t2) from t1, t2; Empty set (0.00sec)

b然後,我們往t1表中插入一些資料:

1 2 mysql> insert into t1 values (1, 1), (2, 2), (3, 3); Query OK, 3 rows affected (0.00 sec)

c此時,我們再次執行a中的查詢,我們可以看到執行的結果        

1 2 mysql>select t1.c1, (select t2.c2 from t2) from t1, t2; ERROR 1242(21000): Subquery returns more than 1 row

d此時我們清空t2表,然後再執行a中所做的查詢。

相關推薦

Mysql 查詢效率優化

一、MySQL子查詢的位置        當一個查詢是另一個查詢的子部分是,稱之為子查詢(查詢語句中巢狀含有查詢語句)。子查詢也是使用頻率比較高的一種查詢型別。因此,優化子查詢,對於整個系統的效能也有直接的影響。        從查詢出現在SQL語句的位置

mysql in 查詢 效率優化(轉)

現在的CMS系統、部落格系統、BBS等都喜歡使用標籤tag作交叉連結,因此我也嚐鮮用了下。但用了後發現我想查詢某個tag的文章列表時速度很慢,達到5秒之久!百思不解(後來終於解決),我的表結構是下面這樣的,文章只有690篇。 文章表article(id,title,content) 標籤表tag(tid,

mysql 分組查詢取各分組的前兩名及查詢效能優化

背景:由於專案運營需要提供各個球員(playerId)跑動距離(distance)最長的前兩場比賽資料記錄:資料存在mongojg表中下面看第一版sql:1.一開始不知道怎麼取跑動最好的前兩場資料所以通過取表現最好的比賽然後通過id從結果集排除再對剩下的比賽取最好表現,最後將

mysql關聯、查詢索引優化

img mysq str 子查詢 exist exists 關聯 not null 1、驅動表:加索引不起作用,因為全表掃描。表1 left join 表2 ,此時表1是驅動表  被驅動表:給這個加索引。 關聯查詢 子查詢時   盡量不使用not in 或者not e

mysql 查詢優化

一般寫子查詢的時候:SELECT max(`Posted-date`) as `Postedday` FROM `transaction`where `unique_key` in ("SELECT `unique_key` from `transaction` where

mysql 查詢

mysq sql classname sna name from use lec mysql 1.標量子查詢 select *from myuser where classid=( select classid from myclass where classname=‘

MySQL:查詢

where lin 寫到 emp alt 量子 允許 lun 位置 對於下表, 1. 場景:查詢代課天數最多的老師的信息。 方法一:select % from teacher order by days desc limit 1 ; 該方法有漏洞:授課天數最多的老師

TP框架 mysql查詢

返回 eache 查詢 gpo row 如果 好的 span pre 一些比較復雜的業務關系,用子查詢解決. 比循環便利要好的多哈. 比如下面這句 select 和where in 語句都用了子查詢. 因為父查詢在select裏,所以用了select的字段當子查詢的條件

mysql查詢

body 所有 lar sele sel 多列 多行 相關子查詢 單列 子查詢分類 標量子查詢:查詢結果為單行單列 列子查詢:一列多行 行子查詢:多列單行 表子查詢:多行多列 子查詢支持規則 select 標量子查詢   from 【join】表子查詢   where【h

mysql 查詢in,返回結果集合失敗

SELECT * FROM station_quality_detail_info qa INNER JOIN station_info sinfo on qa.station_info_id = sinfo.id WHERE FIND_IN_SET(sinfo.ser

空間換時間,超大資料表的查詢效率優化

原文出處:http://www.cnblogs.com/wesley/archive/2012/04/23/2466982.html 在開發論壇程式的時候,我借鑑了目前一些論壇的資料規模,10年的積累大概在2000萬~5000萬左右,因此決定,最低承載力設計要求至少是 9 位數。於是在開發完第一

轉:關於SQL查詢效率優化

1.關於SQL查詢效率,100w資料,查詢只要1秒,與您分享: 機器情況 p4: 2.4 記憶體: 1 G os: windows 2003 資料庫: ms sql server 2000 目的: 查詢效能測試,比較兩種查詢的效能 SQL查詢效率 step by step -- setp 1. --

MySQL 查詢和表連線查詢

SELECT * FROM grade; SELECT * FROM result; SELECT * FROM student; SELECT * FROM subject; SELECT s.StudentNo ,s.StudentName ,j.SubjectName ,r.Stude

MySQL查詢中的特定關鍵字

in 主查詢 where in(列子查詢); any 任意一個 =any(列子查詢):條件在查詢結果中有任何一個匹配即可,等價於in <>any(列子查詢):條件在查詢結果中不等於任意一個 1 = any(1,2,3)===turre 1 <

MySQL查詢 巢狀查詢

子查詢:巢狀在其他查詢中的查詢。 有三張表分別如下: customers: 儲存顧客資訊 orderitems:只儲存訂單資訊,無客戶資訊 orders:儲存訂單號和顧客id   注意:一般在子查詢中,程式先執行在巢狀在最內層的語句,再執行外層。因此在寫子查

詳解mysql查詢

本文詳解mysql中的子查詢: 子查詢分為where子查詢和from子查詢。 where子查詢包括標量子查詢、列子查詢、行子查詢、exists子查詢 from子查詢包括表子查詢 1.標量子查詢 概念:子查詢得到結果是一個數據 (一行一列) 語法

Hbase Filter+Scan 查詢效率優化

Hbase Filter+Scan 查詢效率問題 眾所周知,Hbase利用filter過濾器查詢時候會進行全表掃描,查詢效率低下,如果沒有二級索引,在專案中很多情況需要利用filter,下面針對這種情況嘗試了幾種優化的方案,僅供參考,歡迎交流。 根據業務要求,作

08 mysql 查詢,UNION 聯合查詢,limit分頁

01 子查詢 在某個查詢結果之上進行的查詢.叫做子查詢,即把一個查詢(又叫內部查詢)巢狀在另一個查詢(又叫外部查詢)當中。 select … (select)…【使用較少,瞭解即可】 from …(select)… where …(select)… select子表(要在小括號裡)可以放

MySQL查詢效能優化(一)

為什麼查詢速度會慢 通常來說,查詢的生命週期大致可以按照順序來看:從客戶端,到伺服器,然後在伺服器上進行解析,生成執行計劃,執行,並返回結果給客戶端。其中“執行”可以認為是整個生命週期中最重要的階段,這其中包括了大量為了檢索資料到儲存引擎的呼叫以及呼叫後的資料處理,包括排序、分組等。 在完成這些任務的時候

MYSQL查詢練習

CREATE TABLE emp(     empno INT,     ename VARCHAR(50),     job VARCHAR(50),     mgr