色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

mysql - 測(cè)試不同sql語(yǔ)句的查詢效率

瀏覽:95日期:2022-06-15 13:09:28

問(wèn)題描述

沒(méi)有深入學(xué)習(xí)過(guò)數(shù)據(jù)庫(kù),只是了解一些mysql基礎(chǔ)和增刪改操作,我想問(wèn)問(wèn)有沒(méi)有工具(方法也行),當(dāng)數(shù)據(jù)表中的數(shù)據(jù)幾百萬(wàn)條時(shí),可以讓我通過(guò)使用不同的sql語(yǔ)句,來(lái)直觀的查看不同sql語(yǔ)句的執(zhí)行效率,謝謝大家了

問(wèn)題解答

回答1:

mysql - 測(cè)試不同sql語(yǔ)句的查詢效率4.1. EXPLAIN在MySQL中可以使用EXPLAIN查看SQL執(zhí)行計(jì)劃,用法:EXPLAIN SELECT * FROM tb_item

4.2. 結(jié)果說(shuō)明4.2.1. idSELECT識(shí)別符。這是SELECT查詢序列號(hào)。這個(gè)不重要。4.2.2. select_type表示SELECT語(yǔ)句的類型。

有以下幾種值:1、 SIMPLE表示簡(jiǎn)單查詢,其中不包含連接查詢和子查詢。2、 PRIMARY表示主查詢,或者是最外面的查詢語(yǔ)句。

3、 UNION表示連接查詢的第2個(gè)或后面的查詢語(yǔ)句。

4、 DEPENDENT UNIONUNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢。5、 UNION RESULT連接查詢的結(jié)果。6、 SUBQUERY子查詢中的第1個(gè)SELECT語(yǔ)句。

7、 DEPENDENT SUBQUERY子查詢中的第1個(gè)SELECT語(yǔ)句,取決于外面的查詢。8、 DERIVEDSELECT(FROM 子句的子查詢)。4.2.3. table表示查詢的表。4.2.4. type(重要)表示表的連接類型。以下的連接類型的順序是從最佳類型到最差類型:

1、 system表僅有一行,這是const類型的特列,平時(shí)不會(huì)出現(xiàn),這個(gè)也可以忽略不計(jì)。2、 const數(shù)據(jù)表最多只有一個(gè)匹配行,因?yàn)橹黄ヅ湟恍袛?shù)據(jù),所以很快,常用于PRIMARY KEY或者UNIQUE索引的查詢,可理解為const是最優(yōu)化的。

3、 eq_refmysql手冊(cè)是這樣說(shuō)的:'對(duì)于每個(gè)來(lái)自于前面的表的行組合,從該表中讀取一行。這可能是最好的聯(lián)接類型,除了const類型。它用在一個(gè)索引的所有部分被聯(lián)接使用并且索引是UNIQUE或PRIMARY KEY'。eq_ref可以用于使用=比較帶索引的列。

4、 ref查詢條件索引既不是UNIQUE也不是PRIMARY KEY的情況。ref可用于=或<或>操作符的帶索引的列。

5、 ref_or_null該聯(lián)接類型如同ref,但是添加了MySQL可以專門搜索包含NULL值的行。在解決子查詢中經(jīng)常使用該聯(lián)接類型的優(yōu)化。

上面這五種情況都是很理想的索引使用情況。

6、 index_merge該聯(lián)接類型表示使用了索引合并優(yōu)化方法。在這種情況下,key列包含了使用的索引的清單,key_len包含了使用的索引的最長(zhǎng)的關(guān)鍵元素。7、 unique_subquery該類型替換了下面形式的IN子查詢的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一個(gè)索引查找函數(shù),可以完全替換子查詢,效率更高。8、 index_subquery該聯(lián)接類型類似于unique_subquery。可以替換IN子查詢,但只適合下列形式的子查詢中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)9、 range只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行。

10、 index該聯(lián)接類型與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小。11、 ALL對(duì)于每個(gè)來(lái)自于先前的表的行組合,進(jìn)行完整的表掃描。(性能最差)4.2.5. possible_keys指出MySQL能使用哪個(gè)索引在該表中找到行。如果該列為NULL,說(shuō)明沒(méi)有使用索引,可以對(duì)該列創(chuàng)建索引來(lái)提高性能。4.2.6. key顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL。

可以強(qiáng)制使用索引或者忽略索引:

4.2.7. key_len顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。

注意:key_len是確定了MySQL將實(shí)際使用的索引長(zhǎng)度。

4.2.8. ref顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。4.2.9. rows顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。4.2.10. Extra該列包含MySQL解決查詢的詳細(xì)信息? Distinct:MySQL發(fā)現(xiàn)第1個(gè)匹配行后,停止為當(dāng)前的行組合搜索更多的行。? Not exists:MySQL能夠?qū)Σ樵冞M(jìn)行LEFT JOIN優(yōu)化,發(fā)現(xiàn)1個(gè)匹配LEFT JOIN標(biāo)準(zhǔn)的行后,不再為前面的的行組合在該表內(nèi)檢查更多的行。? range checked for each record (index map: #):MySQL沒(méi)有發(fā)現(xiàn)好的可以使用的索引,但發(fā)現(xiàn)如果來(lái)自前面的表的列值已知,可能部分索引可以使用。? Using filesort:MySQL需要額外的一次傳遞,以找出如何按排序順序檢索行。? Using index:從只使用索引樹中的信息而不需要進(jìn)一步搜索讀取實(shí)際的行來(lái)檢索表中的列信息。? Using temporary:為了解決查詢,MySQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)容納結(jié)果。? Using where:WHERE 子句用于限制哪一個(gè)行匹配下一個(gè)表或發(fā)送到客戶。? Using sort_union(...), Using union(...), Using intersect(...):這些函數(shù)說(shuō)明如何為index_merge聯(lián)接類型合并索引掃描。? Using index for group-by:類似于訪問(wèn)表的Using index方式,Using index for group-by表示MySQL發(fā)現(xiàn)了一個(gè)索引,可以用來(lái)查 詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤訪問(wèn)實(shí)際的表。

下面列出一些數(shù)據(jù)庫(kù)SQL優(yōu)化方案:(01)選擇最有效率的表名順序(筆試常考)

數(shù)據(jù)庫(kù)的解析器按照從右到左的順序處理FROM子句中的表名, FROM子句中寫在最后的表將被最先處理, 在FROM子句中包含多個(gè)表的情況下,你必須選擇記錄條數(shù)最少的表放在最后, 如果有3個(gè)以上的表連接查詢,那就需要選擇那個(gè)被其他表所引用的表放在最后。 例如:查詢員工的編號(hào),姓名,工資,工資等級(jí),部門名 select emp.empno,emp.ename,emp.sal,salgrade.grade,dept.dname from salgrade,dept,emp where (emp.deptno = dept.deptno) and (emp.sal between salgrade.losal and salgrade.hisal) 1)如果三個(gè)表是完全無(wú)關(guān)系的話,將記錄和列名最少的表,寫在最后,然后依次類推 2)如果三個(gè)表是有關(guān)系的話,將引用最多的表,放在最后,然后依次類推

(02)WHERE子句中的連接順序(筆試常考)

數(shù)據(jù)庫(kù)采用自右而左的順序解析WHERE子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他WHERE條件之左, 那些可以過(guò)濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的之右。 例如:查詢員工的編號(hào),姓名,工資,部門名 select emp.empno,emp.ename,emp.sal,dept.dname from emp,dept where (emp.deptno = dept.deptno) and (emp.sal > 1500)

(03)SELECT子句中避免使用*號(hào)

數(shù)據(jù)庫(kù)在解析的過(guò)程中,會(huì)將*依次轉(zhuǎn)換成所有的列名,這個(gè)工作是通過(guò)查詢數(shù)據(jù)字典完成的,這意味著將耗費(fèi)更多的時(shí)間 select empno,ename from emp;

(04)用TRUNCATE替代DELETE

(05)盡量多使用COMMIT

因?yàn)镃OMMIT會(huì)釋放回滾點(diǎn)

(06)用WHERE子句替換HAVING子句

WHERE先執(zhí)行,HAVING后執(zhí)行

(07)多使用內(nèi)部函數(shù)提高SQL效率

(08)使用表的別名

salgrade s

(09)使用列的別名

ename e回答2:

EXPLAIN

回答3:

推薦你用一個(gè)可視化工具,navicat,這個(gè)執(zhí)行sql的時(shí)候會(huì)自動(dòng)進(jìn)行explain分析操作,操作起來(lái)比命令行方便。

回答4:

剛實(shí)習(xí)沒(méi)多久,用的是sql server,也是別人那找來(lái)的記錄下來(lái)。DBCC DROPCLEANBUFFERS清空緩存DBCC FREEPROCCACHE 刪除計(jì)劃高速緩存中的元素SET STATISTICS TIME ON 看CPU時(shí)間SET STATISTICS IO ON 看邏輯讀取數(shù)SET STATISTICS PROFILE ON 這個(gè)不會(huì)用

相關(guān)文章:
主站蜘蛛池模板: 在线观看国产一区二三区 | 91欧美一区二区三区综合在线 | 一级毛片视频播放 | 亚洲精品日韩中文字幕久久久 | 亚洲高清在线观看视频 | 欧美一级毛片在线 | 日本欧美一级aaaaa毛片 | 国产精品久久久久久久毛片 | 国产精品99在线观看 | 步兵精品手机在线观看 | 亚洲精品久久久久影院 | 成人三级视频在线观看 | 成人午夜在线播放 | 怡红院在线a男人的天堂 | 国产91免费在线 | 美女被躁爽死 | 成人精品在线视频 | 精品视频免费在线 | 亚洲国产成人在人网站天堂 | 久久青草免费线观最新 | 97免费视频免费视频 | 国产美女一区二区在线观看 | 亚洲天堂久久新 | 午夜成人免费影院 | 久久久久成人精品一区二区 | 日韩免费一级毛片欧美一级日韩片 | 亚洲黄色片网站 | 欧美日韩在线观看精品 | 欧美精品99久久久久久人 | 日韩大片高清播放器大全 | 成人免费一级毛片在线播放视频 | 国产免费一级在线观看 | 一级片图片 | 久久国内免费视频 | 成年女人在线观看片免费视频 | 精品午夜寂寞影院在线观看 | 国内黄色一级精品 | 在线观看一区二区三区四区 | 一级毛片aaaaaa免费看 | 久久久久久久久久综合情日本 | 欧美日本在线三级视频 |