sql sever 中如何查看某个表的索引_查看执行计划:explain的type
type顯示訪問(wèn)類型,較為重要。通過(guò)它可以了解我們的SQL語(yǔ)句是否優(yōu)化過(guò)、是否達(dá)到最佳的效果。
它的值有很多,從最好到最差比較如下:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
以下幾個(gè)是常見(jiàn)的(從最好到最差):
system > const > eq_ref > ref > range > index > All
一般而言,我們要保證查詢至少達(dá)到ranag級(jí)別,最好能到達(dá)到ref。
分別了解一下幾個(gè)常見(jiàn)的值的涵義。
system
表只有一行記錄,這種情況平時(shí)一般不會(huì)出現(xiàn),可以忽略。
const
表示通過(guò)索引一次就找到了,用于比較主鍵或唯一鍵索引。因?yàn)?strong>只匹配一行數(shù)據(jù),所以很快。比如將主鍵置于where列表中,MySQL就能將該查詢轉(zhuǎn)換為一個(gè)常量。
如:explain select * from (select * from emp where id = 1)x;
FROM后的子查詢,所以select_type為DERIVED,第2行結(jié)果的id值較大,所以優(yōu)先執(zhí)行。emp表中id是主鍵,id=1即只匹配一行數(shù)據(jù),所以type的值為const。同時(shí),外層查詢從臨時(shí)表x中查詢?nèi)?#xff0c;由于x中只有一行數(shù)據(jù),所以type值是system。
eq_ref
唯一性索引掃描,對(duì)于每個(gè)索引鍵,表中只有一條記錄與之匹配。常見(jiàn)于主鍵或唯一鍵索引掃描。type的值是eq_ref的查詢中用到了索引,但查詢只有一條記錄匹配。
用兩個(gè)表簡(jiǎn)單測(cè)試
test1表:
test2表
有以下SQL:
explain select * from test1 t1 ,test2 t2 where t1.id = t2.id;
看其執(zhí)行計(jì)劃
t2的type值是ALL,即全表搜索,t1為eq_ref。兩表id字段為主鍵,t1.id=t2.id條件下只一行數(shù)據(jù)是符合的。
ref
非唯一性索引掃描,返回匹配某個(gè)單獨(dú)值的所有行。本質(zhì)上也是一種索引訪問(wèn),它返回所有匹配某個(gè)單獨(dú)值的行,然而,它可能會(huì)得到多個(gè)符合條件的行,所以它應(yīng)該屬于查找和掃描的混合體。
實(shí)例
emp表的數(shù)據(jù)
在這個(gè)表上用job和deptNo字段創(chuàng)建一個(gè)復(fù)合索引
mysql> create index index1 on emp(job,deptNo);Query OK, 10 rows affected (0.59 sec)
現(xiàn)在要查找deptNo=1的數(shù)據(jù)(deptNo和job是復(fù)合索引,但只使用了一半)
返回了兩行,再看一下執(zhí)行計(jì)劃:
匹配deptNo=1的值的結(jié)果有兩行。
現(xiàn)在把索引刪除
drop index index1 on emp;
假設(shè)emp表的deptNo是test2的id。有以下sql
select * from emp e , test2 t2 where e.deptNo = t2.id;
我們知道結(jié)果有兩行,其執(zhí)行計(jì)劃如下:
emp表的查詢type是ref,因?yàn)閠est2表只有一行數(shù)據(jù),所有就類似于匹配detpNo的單獨(dú)的值行。
rang
只搜索給定范圍的行。一般就是你在where語(yǔ)句中出現(xiàn)between、、in等查詢這種范圍掃描,比全表掃描要好,因?yàn)樗恍枰_(kāi)始于索引的某一個(gè)點(diǎn),而結(jié)束另一點(diǎn),不用掃描全部索引。如以下SQL
select * from emp where id in (1,2);
能夠達(dá)到rang已經(jīng)可以了。
index和ALL
index和ALL都是讀全表,兩者區(qū)別在于index類型只遍歷索引樹(shù),通常比ALL快。
如以下兩條SQL:
select id from emp;
select id ,ename from emp;
explain查看如下:
若SQL能達(dá)不到rang或以上的話,能達(dá)到index也可以。
關(guān)于type介紹到此,主要是要了解它的值所代表的涵義,好壞的排列,那我們就可以知道SQL的優(yōu)劣,以及優(yōu)化是否有效果。
總結(jié)
以上是生活随笔為你收集整理的sql sever 中如何查看某个表的索引_查看执行计划:explain的type的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 薰衣草茶的功效与作用、禁忌和食用方法
- 下一篇: ckks方案优化最好的_果断收藏:SEO