問題

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供思茅企業(yè)網(wǎng)站建設(shè),專注與做網(wǎng)站、成都網(wǎng)站制作、H5技術(shù)、小程序制作等業(yè)務(wù)。10年已為思茅眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設(shè)計公司優(yōu)惠進行中。
我們有一個 SQL,用于找到?jīng)]有主鍵 / 唯一鍵的表,但是在 MySQL 5.7 上運行特別慢,怎么辦?
實驗
我們搭建一個 MySQL 5.7 的環(huán)境,此處省略搭建步驟。
寫個簡單的腳本,制造一批帶主鍵和不帶主鍵的表:
執(zhí)行一下腳本:
現(xiàn)在執(zhí)行以下 SQL 看看效果:
...
執(zhí)行了 16.80s,感覺是非常慢了。
現(xiàn)在用一下 DBA 三板斧,看看執(zhí)行計劃:
感覺有點慘,由于 information_schema.columns 是元數(shù)據(jù)表,沒有必要的統(tǒng)計信息。
那我們來 show warnings 看看 MySQL 改寫后的 SQL:
我們格式化一下 SQL:
可以看到 MySQL 將
select from A where A.x not in (select x from B) //非關(guān)聯(lián)子查詢
轉(zhuǎn)換成了
select from A where not exists (select 1 from B where B.x = a.x) //關(guān)聯(lián)子查詢
如果我們自己是 MySQL,在執(zhí)行非關(guān)聯(lián)子查詢時,可以使用很簡單的策略:
select from A where A.x not in (select x from B where ...) //非關(guān)聯(lián)子查詢:1. 掃描 B 表中的所有記錄,找到滿足條件的記錄,存放在臨時表 C 中,建好索引2. 掃描 A 表中的記錄,與臨時表 C 中的記錄進行比對,直接在索引里比對,
而關(guān)聯(lián)子查詢就需要循環(huán)迭代:
select from A where not exists (select 1 from B where B.x = a.x and ...) //關(guān)聯(lián)子查詢掃描 A 表的每一條記錄 rA: ? ? 掃描 B 表,找到其中的第一條滿足 rA 條件的記錄。
顯然,關(guān)聯(lián)子查詢的掃描成本會高于非關(guān)聯(lián)子查詢。
我們希望 MySQL 能先"緩存"子查詢的結(jié)果(緩存這一步叫物化,MATERIALIZATION),但MySQL 認(rèn)為不緩存更快,我們就需要給予 MySQL 一定指導(dǎo)。
...
可以看到執(zhí)行時間變成了 0.67s。
整理
我們診斷的關(guān)鍵點如下:
\1. 對于 information_schema 中的元數(shù)據(jù)表,執(zhí)行計劃不能提供有效信息。
\2. 通過查看 MySQL 改寫后的 SQL,我們猜測了優(yōu)化器發(fā)生了誤判。
\3. 我們增加了 hint,指導(dǎo) MySQL 正確進行優(yōu)化判斷。
但目前我們的實驗僅限于猜測,猜中了萬事大吉,猜不中就無法做出好的診斷。
在數(shù)據(jù)庫中查找某一字段的值的操作方法和步驟如下:
1、首先,在桌面上,單擊“
Management Studio”圖標(biāo),如下圖所示。
2、其次,完成上述步驟后,在該界面中,單擊左上角的“新建查詢”按鈕,如下圖所示。
3、接著,完成上述步驟后,輸入如下紅框標(biāo)注的SQL語句,如下圖所示。
4、然后,完成上述步驟后,在該界面中,單擊左上方的“執(zhí)行”選項,如下圖所示。
5、最后,完成上述步驟后,在此界面中,顯示查詢數(shù)據(jù)庫有某個字段,如下圖所示。這樣,問題就解決了。
可以使用 show processlist 命令查看當(dāng)前所有連接信息。
使用 explain 命令查詢 SQL 語句執(zhí)行計劃。
開啟慢查詢?nèi)罩荆榭绰樵兊?SQL。
當(dāng)前名稱:mysql怎么查找問題 mysql怎么查找數(shù)據(jù)
分享URL:http://chinadenli.net/article2/hhghoc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、App設(shè)計、網(wǎng)站內(nèi)鏈、面包屑導(dǎo)航、ChatGPT、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)