99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁(yè)大數(shù)據(jù)時(shí)代mysql中explain執(zhí)行結(jié)果中的rows究竟是怎么個(gè)統(tǒng)計(jì)原理呢?
mysql中explain執(zhí)行結(jié)果中的rows究竟是怎么個(gè)統(tǒng)計(jì)原理呢?
2023-05-09
收藏

MySQL中的EXPLAIN命令可用于分析SELECT查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃。在EXPLAIN執(zhí)行結(jié)果中,最常見(jiàn)的指標(biāo)是“rows”,它表示MySQL估算在執(zhí)行該查詢(xún)時(shí)掃描的行數(shù)。本文將深入探討MySQL中EXPLAIN執(zhí)行結(jié)果中的rows統(tǒng)計(jì)原理。

在MySQL中,使用索引或全表掃描來(lái)獲取查詢(xún)結(jié)果的成本不同。MySQL會(huì)根據(jù)查詢(xún)語(yǔ)句和數(shù)據(jù)表的特性,選擇最優(yōu)的查詢(xún)執(zhí)行計(jì)劃。在進(jìn)行查詢(xún)執(zhí)行計(jì)劃之前,MySQL會(huì)收集表的統(tǒng)計(jì)信息,并根據(jù)這些統(tǒng)計(jì)信息進(jìn)行優(yōu)化選擇。

對(duì)于一個(gè)給定的SELECT查詢(xún)語(yǔ)句,MySQL會(huì)生成一棵查詢(xún)執(zhí)行計(jì)劃樹(shù),其中每個(gè)節(jié)點(diǎn)代表一個(gè)操作步驟。這些操作步驟可能包括從單個(gè)表中讀取行、合并兩個(gè)有序列表、連接兩個(gè)表等。在這個(gè)執(zhí)行計(jì)劃樹(shù)中,每個(gè)節(jié)點(diǎn)都有一個(gè)估算值,表示這個(gè)操作步驟需要處理多少行數(shù)據(jù)。

當(dāng)用戶執(zhí)行一個(gè)SELECT查詢(xún)語(yǔ)句時(shí),MySQL首先解析該語(yǔ)句,并將其轉(zhuǎn)換為一個(gè)查詢(xún)執(zhí)行計(jì)劃樹(shù)。然后,MySQL會(huì)遍歷該執(zhí)行計(jì)劃樹(shù),根據(jù)查詢(xún)執(zhí)行計(jì)劃樹(shù)上的每個(gè)節(jié)點(diǎn)計(jì)算出該節(jié)點(diǎn)需要處理的行數(shù)。這些行數(shù)累加到最終結(jié)果中,最終得到了查詢(xún)所要掃描的總行數(shù)。

在MySQL中,EXPLAIN命令使用這種估算方法來(lái)預(yù)測(cè)查詢(xún)執(zhí)行的成本。當(dāng)用戶運(yùn)行EXPLAIN命令時(shí),MySQL會(huì)計(jì)算查詢(xún)語(yǔ)句的執(zhí)行計(jì)劃樹(shù),并將每個(gè)節(jié)點(diǎn)的估算行數(shù)作為輸出結(jié)果的一部分之一。其中,最重要的估算值是“All rows”(所有行),它表示整個(gè)查詢(xún)語(yǔ)句會(huì)掃描多少行數(shù)據(jù)。此外,還有其他估算值,如“Filtered”(過(guò)濾)和“Using index”(使用索引)等。

下面我們來(lái)看幾種常見(jiàn)情況下,MySQL如何計(jì)算rows值:

  1. 單表查詢(xún)

當(dāng)我們對(duì)一個(gè)數(shù)據(jù)表執(zhí)行SELECT查詢(xún)時(shí),MySQL會(huì)統(tǒng)計(jì)該表總行數(shù),然后返回rows值為表的總行數(shù)。這是最簡(jiǎn)單和最基本的情況。

  1. 帶WHERE條件的單表查詢(xún)

當(dāng)我們?cè)趩蝹€(gè)表上使用WHERE條件進(jìn)行過(guò)濾時(shí),MySQL會(huì)首先根據(jù)WHERE條件過(guò)濾出匹配的記錄,然后根據(jù)實(shí)際匹配的行數(shù)計(jì)算rows值。

例如,如果我們有一個(gè)名為“users”的數(shù)據(jù)表,其中包含1000行記錄,我們執(zhí)行以下查詢(xún):

SELECT * FROM users WHERE age > 18;

MySQL會(huì)首先掃描整張表,找到所有年齡超過(guò)18歲的用戶記錄,并返回這些記錄的行數(shù)作為rows值。這個(gè)值通常小于表的總行數(shù)。

  1. 多表關(guān)聯(lián)查詢(xún)

在多表查詢(xún)時(shí),MySQL會(huì)根據(jù)連接類(lèi)型和連接條件來(lái)計(jì)算rows值。對(duì)于INNER JOIN、LEFT JOIN和RIGHT JOIN等連接類(lèi)型,MySQL會(huì)根據(jù)連接條件上的過(guò)濾條件來(lái)估算返回結(jié)果的行數(shù)。

例如,如果我們有一個(gè)名為“users”的數(shù)據(jù)表和一個(gè)名為“orders”的數(shù)據(jù)表,其中“orders”表包含10000行記錄,我們執(zhí)行以下查詢(xún):

SELECT * FROM users INNER JOIN orders ON users.id = orders.user_id;

MySQL會(huì)首先根據(jù)連接條件找到兩個(gè)表中相匹配的記錄,并返回這些記錄的行數(shù)作為rows值。在這種情況下,該值通常小于兩個(gè)表的總行數(shù)之和。

  1. 使用索引

當(dāng)我們?cè)诓樵?xún)語(yǔ)句中使用索引時(shí),MySQL可以通過(guò)索引統(tǒng)計(jì)信息來(lái)估算需要掃描的行數(shù)。例如,如果我們有一個(gè)名為“users

”的數(shù)據(jù)表,并在其中創(chuàng)建了一個(gè)名為“idx_age”的索引,我們執(zhí)行以下查詢(xún):

SELECT * FROM users WHERE age > 18;

MySQL會(huì)使用“idx_age”索引來(lái)查找符合條件的記錄。它可以根據(jù)該索引中存儲(chǔ)的統(tǒng)計(jì)信息來(lái)估算需要掃描的行數(shù)。

  1. 使用聚合函數(shù)

當(dāng)我們?cè)诓樵?xún)語(yǔ)句中使用聚合函數(shù)時(shí),MySQL會(huì)根據(jù)GROUP BY子句或DISTINCT關(guān)鍵字來(lái)計(jì)算rows值。例如,如果我們有一個(gè)名為“users”的數(shù)據(jù)表,并執(zhí)行以下查詢(xún):

SELECT COUNT(DISTINCT age) FROM users;

MySQL會(huì)根據(jù)DISTINCT關(guān)鍵字統(tǒng)計(jì)出表中不同年齡的數(shù)量,并將其返回作為rows值。

  1. 子查詢(xún)

當(dāng)我們?cè)诓樵?xún)語(yǔ)句中使用子查詢(xún)時(shí),MySQL會(huì)首先計(jì)算子查詢(xún)語(yǔ)句的rows值,然后將其作為父查詢(xún)的輸入。例如,如果我們有一個(gè)名為“orders”的數(shù)據(jù)表和一個(gè)名為“users”的數(shù)據(jù)表,其中“orders”表包含10000行記錄,我們執(zhí)行以下查詢(xún):

SELECT * FROM orders WHERE user_id IN (SELECT id FROM users WHERE age > 18);

MySQL會(huì)首先執(zhí)行子查詢(xún),找到所有年齡大于18歲的用戶ID,然后將這些ID與“orders”表中的user_id列進(jìn)行匹配。MySQL將使用子查詢(xún)的rows值來(lái)計(jì)算父查詢(xún)的rows值。

總之,MySQL中EXPLAIN執(zhí)行結(jié)果中的rows值是根據(jù)查詢(xún)執(zhí)行計(jì)劃估算的結(jié)果,這些估算值基于表的統(tǒng)計(jì)信息、查詢(xún)語(yǔ)句和數(shù)據(jù)表特性等多種因素。雖然rows值只是一個(gè)估算值,但它可以幫助我們優(yōu)化查詢(xún)語(yǔ)句,減少查詢(xún)的執(zhí)行時(shí)間。如果需要進(jìn)一步了解MySQL中的查詢(xún)優(yōu)化,請(qǐng)參考MySQL官方文檔。


數(shù)據(jù)庫(kù)知識(shí)對(duì)于數(shù)據(jù)分析工作至關(guān)重要,其中 SQL 更是數(shù)據(jù)獲取與處理的關(guān)鍵技能。如果你想進(jìn)一步提升自己在數(shù)據(jù)分析領(lǐng)域的能力,學(xué)會(huì)靈活運(yùn)用 SQL 進(jìn)行數(shù)據(jù)挖掘與分析,那么強(qiáng)烈推薦你學(xué)習(xí)《SQL 數(shù)據(jù)分析極簡(jiǎn)入門(mén)

學(xué)習(xí)入口:https://edu.cda.cn/goods/show/3412?targetId=5695&preview=0

數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢(xún)
客服在線
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }