亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

mysql - sql 根據(jù)明細表一個字段查詢主表列表,使用group,disctinct還是exists

瀏覽:98日期:2022-06-21 14:37:21

問題描述

有兩個表:A:

| id | name | ---id主鍵

B:

| id | a_id | item_id | item_name | desc | ----id主鍵,a_id 與 A中的id關(guān)聯(lián)

查詢-包含item_id的所有的A記錄

SELECT DISTINCT A.* FROM A JOIN B ON A.id = B.a_id WHERE item_id = 123;

SELECT A.* FROM A JOIN B ON A.id = B.a_id WHERE B.item_id =123 GROUP BY A.id;

SELECT A.* FROM A WHERE EXISTS (SELECT 1 FROM B WHERE B.a_id = A.id and B.item_id = 123);

這三種查詢那種最好?

問題解答

回答1:

如果數(shù)據(jù)量很大的話第二種和第三種都不建議你用。推薦你用第一種。我們做項目的時候每次DBA審查我們的SQL只要出現(xiàn)子查詢或者SQL用到GROUP BY都會問我們數(shù)據(jù)量大小還有表是怎么建的,都會建議我們不用GROUP BY和子查詢。老是說效率慢……我是菜鳥具體怎么慢我也不清楚

回答2:

建議采用第3種,從語義上最符合你的要求,效率上也應該是最高的。第1種寫法,采用表鏈接的方式,如果表A和表B是一對多的關(guān)系,掃描B的記錄會超出需要(需求是找到一條即可,使用JOIN的方式是全部找了),另外由于使用distinct,數(shù)據(jù)庫內(nèi)部可能需要排序操作,效率會受一定的影響。第2種寫法,不是標準的sql,group by只有一個字段,理論上SELECT中A.*這種寫法是不支持的,效率應該和第一種差不多。第3種寫法,exists語句會被數(shù)據(jù)庫優(yōu)化為半連接(oracle中是這樣的,mysql需要自己看執(zhí)行計劃合適),因此效率上是最高的。

相關(guān)文章:
主站蜘蛛池模板: 日本亚欧乱色视频在线系列 | 国产精品99久久久久久人 | 色综合天天综合网国产成人网 | 午夜伦情电午夜伦情影院 | 91手机视频在线 | 毛片在线看网站 | 亚洲黄色免费网站 | 综合久久精品 | 成人午夜兔费观看网站 | 久久久国产精品网站 | 91噜噜噜在线观看 | 亚洲欧美日韩中文高清一 | 亚洲久久网站 | 在线视频久 | 欧美激情视频一级视频一级毛片 | 欧美黑寡妇香蕉视频 | 日韩黄色一级毛片 | 欧美爱爱网站 | 香蕉视频在线观看网站 | 视频在线观看一区二区 | 国产精品久久久久999 | 亚洲精品一区二区ai换脸 | 久久777国产线看观看精品卜 | 真人毛片免费全部播放完整 | 久久五十路 | 精品视频一区二区三区在线播放 | 久久久精品日本一区二区三区 | 亚洲理论片中文字幕电影 | 男啪女视频免费观看网站 | 99久久精品免费看国产情侣 | 九九成人| 干综合网 | 日韩 欧美 中文字幕 不卡 | 国产在线观看成人免费视频 | 一区二区三区在线看 | 免费爱爱视频网站 | 韩国 欧美 日产 国产精品 | 亚洲产在线精品第一站不卡 | 韩国三级欧美三级国产三级 | 看欧美的一级毛片 | 杨幂国产精品福利在线观看 |