电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

MySQL 分組查詢的優(yōu)化方法

瀏覽:8日期:2023-10-03 11:42:59

MySQL 在處理 GROUP BY 和 DISTINCT 查詢的方式在大多數(shù)情況下類似,事實(shí)上,在優(yōu)化過程中有時(shí)候會把在這兩種方式中轉(zhuǎn)換。兩類查詢都能夠從索引中受益,通常,這也是優(yōu)化這兩種查詢最為重要的方式。

在無法使用索引時(shí),MySQL 對于 GROUP BY 查詢有兩種策略:使用臨時(shí)表或者 filesort 執(zhí)行分組。對于給定的查詢,兩種方式都沒法更高效。我們可以通過配置 SQL_BIG_RESULT 和 SQL_SMALL_RESULT 來指定優(yōu)化器選擇其中一個(gè)方式。

通常,對查詢表的id 進(jìn)行分組比使用值進(jìn)行分組效率更高,例如下面的查詢效率就比較低:

SELECT actor.first_name, actor.last_name, COUNT(*)FROM sakila.file_actorINNER JOIN sakila.actor USING(actor_id)GROUP BY actor.first_name, actor.last_name;

而下面的查詢方式則更有效:

SELECT actor.first_name, actor.last_name, COUNT(*)FROM sakila.file_actorINNER JOIN sakila.actor USING(actor_id)GROUP BY film_actor.actor_id;

而使用 actor.actor_id 進(jìn)行分組會比 film_actor.actor_id更高效。

這個(gè)查詢能夠發(fā)揮其優(yōu)勢的依據(jù)是演員(actor)的姓名是依賴于 actor_id 的,因此會返回相同的結(jié)果,但是如果返回的結(jié)果不同的話就不能這么做了。甚至有些時(shí)候服務(wù)端通過 SQL_MODE 配置禁用了 GROUP BY。此時(shí)如果不關(guān)心獲取的值,而且用于分組的列的值是唯一的,這可以使用 MIN和 MAX 來解決這個(gè)問題。

SELECT MIN(actor.first_name), MAX(actor.last_name), ...;

對于完美主義者,他們會認(rèn)為你的分組是錯(cuò)誤的,他們也是對的。一個(gè)虛擬的 MIN 或 MAX 的結(jié)果是查詢并不會正確地組裝。然而,有時(shí)候你只是為了讓 MySQL 更快地執(zhí)行查詢。完美主義者對于下面的查詢會滿意:

SELECT actor.fisrt_name, actor.last_name, c.cntFROM sakila.actorINNER JOIN ( SELECT actor_id, COUNT(*) AS cnt FROM sakila.film_actor GROUP BY actor_id ) AS c USING(actor_id);

然而,子查詢中創(chuàng)建和填充臨時(shí)表的代價(jià)可能比理論上看起來的死辦法更高。需要記住的是,子查詢構(gòu)建的臨時(shí)表是沒有索引的,這會導(dǎo)致性能上的下降。

通常在分組查詢中,選擇沒有分組的列是一個(gè)糟糕的主意。這是因?yàn)椴樵兘Y(jié)果是不確定的,一旦改變了索引或優(yōu)化器使用了不同的策略都會導(dǎo)致結(jié)果被改變。事實(shí)上,我們建議將服務(wù)端的 SQL_MODE 設(shè)置為 ONLY_FULL_GROUP_BY,這時(shí)寫了一個(gè)糟糕的分組查詢時(shí),系統(tǒng)會產(chǎn)生一個(gè)錯(cuò)誤而不是直接執(zhí)行。開啟 ONLY_FULL_GROUP_BY 后,SELECT 的字段只能是 GROUP BY 指定的字段,此時(shí)可以通過構(gòu)建分步查詢或子查詢的方式,先分組查出分組的列,再做二次查詢。

MySQL 會根據(jù) GROUP BY 指定的列次序自動分組,除非是使用了 ORDER BY 指定排序規(guī)則。如果不在乎次序并且發(fā)現(xiàn)了這導(dǎo)致了一個(gè) filesort,這時(shí)候可以使用 ORDER BY NULL 來跳過自動排序。也可以通過在 GROUP BY 后面增加 DESC 或 ASC 來指定結(jié)果按指定的方向排序。

有時(shí)候可以在分組查詢時(shí)要求 MySQL 在結(jié)果中做一次超級聚合。這可以通過在 GROUP BY 后面增加WITH ROLLUP 子句完成,但是這不一定能夠達(dá)到優(yōu)化的預(yù)期??梢酝ㄟ^ EXPLAIN 檢查執(zhí)行的方法,注意分組有沒有通過 filesort 或臨時(shí)表完成。然后在對相同的查詢移除 WITH ROLLUP 后進(jìn)行對比。通過對比也許可以找到優(yōu)化的辦法。

有些時(shí)候通過增加聚合查詢會使得效率更高,雖然這種方式會返回更多的行。也可以通過在 FROM 后面嵌套子查詢來保持中間查詢結(jié)果,然后再使用 UNION 獲取最終結(jié)果。

但是注意的是,在應(yīng)用程序中最好是移除 WITH ROLLUP,而通過優(yōu)化來完成分組查詢。

結(jié)語:使用 GROUP BY 進(jìn)行分組查詢時(shí)最好是使用索引列分組,若無需指定次序可以使用 ORDER BY NULL 進(jìn)行優(yōu)化。倘若不按索引列分組的時(shí)候,則需要考慮變通的辦法,并且考慮是否要使用子查詢或使用 WITH ROLLUP 檢查性能后再做優(yōu)化。同時(shí),為了防止分組查詢出現(xiàn)不可預(yù)料的錯(cuò)誤,最好是開啟 ONLY_FULL_GROUP_BY。

以上就是MySQL 分組查詢的優(yōu)化方法的詳細(xì)內(nèi)容,更多關(guān)于MySQL 分組查詢的優(yōu)化的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 工业冷却塔维修厂家_方形不锈钢工业凉水塔维修改造方案-广东康明节能空调有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 耐力板-PC阳光板-PC板-PC耐力板 - 嘉兴赢创实业有限公司 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 活动策划,舞台搭建,活动策划公司-首选美湖上海活动策划公司 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | EFM 022静电场测试仪-套帽式风量计-静电平板监测器-上海民仪电子有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 芝麻黑-芝麻黑石材厂家-永峰石业 | 常州律师事务所_常州律所_常州律师-江苏乐天律师事务所 | 江西高职单独招生-江西单招考试-江西高职单招网 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 国际线缆连接网 - 连接器_线缆线束加工行业门户网站 | 喷漆房_废气处理设备-湖北天地鑫环保设备有限公司 | 重庆磨床过滤机,重庆纸带过滤机,机床伸缩钣金,重庆机床钣金护罩-重庆达鸿兴精密机械制造有限公司 | 众能联合-提供高空车_升降机_吊车_挖机等一站工程设备租赁 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 新疆散热器,新疆暖气片,新疆电锅炉,光耀暖通公司 | 冷却塔减速机器_冷却塔皮带箱维修厂家_凉水塔风机电机更换-广东康明冷却塔厂家 | 塑料托盘厂家直销-吹塑托盘生产厂家-力库塑业【官网】 | 压滤机-洗沙泥浆处理-压泥机-山东创新华一环境工程有限公司 | 电动球阀_不锈钢电动球阀_电动三通球阀_电动调节球阀_上海湖泉阀门有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 热工多功能信号校验仪-热电阻热电偶校验仿真仪-金湖虹润仪表 | 对辊破碎机-液压双辊式,强力双齿辊,四辊破碎机价格_巩义市金联机械设备生产厂家 | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 施工电梯_齿条货梯_烟囱电梯_物料提升机-河南大诚机械制造有限公司 | 上海地磅秤|电子地上衡|防爆地磅_上海地磅秤厂家–越衡称重 | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 碳钢法兰厂家,非标法兰,定制异型,法兰生产厂家-河北九瑞管道 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 压力喷雾干燥机,喷雾干燥设备,柱塞隔膜泵-无锡市闻华干燥设备有限公司 | 购买舔盐、舔砖、矿物质盐压块机,鱼饵、鱼饲料压块机--请到杜甫机械 | 青海电动密集架_智能密集架_密集架价格-盛隆柜业青海档案密集架厂家 | 哈希PC1R1A,哈希CA9300,哈希SC4500-上海鑫嵩实业有限公司 | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 据信,上课带着跳 D 体验-别样的课堂刺激感受引发网友热议 | 焦作网 WWW.JZRB.COM | 热熔胶网膜|pes热熔网膜价格|eva热熔胶膜|热熔胶膜|tpu热熔胶膜厂家-苏州惠洋胶粘制品有限公司 | 抖音短视频运营_企业网站建设_网络推广_全网自媒体营销-东莞市凌天信息科技有限公司 |