日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

index-B

發布時間:2024/4/13 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 index-B 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

優勢

類似大學圖書館建書目索引,提高數據檢索的效率,降低數據庫的IO成本

通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗

?

劣勢

實際上索引也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引列也是要占用空間的

雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE和DELETE。因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化后的索引信息

索引只是提高效率的一個因素,如果你的MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句

?

分類

單值索引

即一個索引只包含單個列,一個表可以有多個單列索引

唯一索引

索引列的值必須唯一,但允許有空值

復合索引

即一個索引包含多個列

基本語法

創建

CREATE ?[UNIQUE ] INDEX indexName ON mytable(columnname(length));?

ALTER TABLE 表名 ADD ?[UNIQUE ] ?INDEX [indexName] ON (columnname(length))?

刪除

DROP INDEX [indexName] ON mytable;?

查看

SHOW INDEX FROM table_name\G

使用ALTER命令

有四種方式來添加數據表的索引:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。

ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現多次。

?

Explain

各字段解釋

id

select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序

三種情況

id相同,執行順序由上至下

id相同,執行順序由上至下

id不同,如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行

如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行

id相同不同,同時存在

id如果相同,可以認為是一組,從上往下順序執行;

在所有組中,id值越大,優先級越高,越先執行

衍生 = DERIVED
?

select_type

有哪些

查詢的類型,主要是用于區別
普通查詢、聯合查詢、子查詢等的復雜查詢

1. SIMPLE

簡單的 select 查詢,查詢中不包含子查詢或者UNION

2. PRIMARY

查詢中若包含任何復雜的子部分,最外層查詢則被標記為

3. SUBQUERY

在SELECT或WHERE列表中包含了子查詢

4. DERIVED

在FROM列表中包含的子查詢被標記為DERIVED(衍生)MySQL會遞歸執行這些子查詢, 把結果放在臨時表里。

5. UNION

若第二個SELECT出現在UNION之后,則被標記為UNION;
若UNION包含在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED

6. UNION RESULT

從UNION表獲取結果的SELECT

?

table

顯示這一行的數據是關于哪張表的

?

type

訪問類型排列

type顯示的是訪問類型,是較為重要的一個指標,結果值從最好到最壞依次是

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL?

system>const>eq_ref>ref>range>index>ALL

一般來說,得保證查詢至少達到range級別,最好能達到ref。

?

顯示查詢使用了何種類型,從最好到最差依次是:system>const>eq_ref>ref>range>index>ALL

system

表只有一行記錄(等于系統表),這是const類型的特列,平時不會出現,這個也可以忽略不計

const

表示通過索引一次就找到了,const用于比較primary key或者unique索引。因為只匹配一行數據,所以很快如將主鍵置于where列表中,MySQL就能將該查詢轉換為一個常量

eq_ref

唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描

ref

非唯一性索引掃描,返回匹配某個單獨值的所有行.
本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,
它可能會找到多個符合條件的行,所以他應該屬于查找和掃描的混合體

range

只檢索給定范圍的行,使用一個索引來選擇行。key 列顯示使用了哪個索引
一般就是在你的where語句中出現了between、<、>、in等的查詢
這種范圍掃描索引掃描比全表掃描要好,因為它只需要開始于索引的某一點,而結束語另一點,不用掃描全部索引。

index

Full Index Scan,index與ALL區別為index類型只遍歷索引樹。這通常比ALL快,因為索引文件通常比數據文件小。
也就是說雖然all和Index都是讀全表,但index是從索引中讀取的,而all是從硬盤中讀的)

all

Full Table Scan,將遍歷全表以找到匹配的行

備注:一般來說,得保證查詢至少達到range級別,最好能達到ref。

?

總結

以上是生活随笔為你收集整理的index-B的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。