初學者都能看懂的MYSQL索引基礎

2021-10-25 14:59:44 字數 1985 閱讀 4057

一位愛好技術的橘右京的哥哥橘左京

索引用於快速查詢表中資料的值,若不使用索引mysql就會進行逐行查詢,資料量大的情況下效率極低;若使用索引,可快速達到位置進行查詢,不會去查詢無用資料,效率高。

索引就像書中的目錄,可直接通過目錄去查詢內容所在頁數,而不需要一頁頁的查詢。

優勢1).資料量大的情況下大大加快查詢速度,降低資料據io成本。

2).通過索引對資料進行排序,降低資料排序的成本,降低cpu消耗。

劣勢

1).在新增、修改、刪除時,索引也需要建立或維護,所耗費的時間也會增加。

2).索引實際上也是一張表,會存放到乙個索引檔案中,儲存了主鍵和索引字段,並指向實體類的記錄,所以索引也占用一定的空間,資料表中的資料會有最大上線設定,如果有大量的索引,可能資料表會更快到達上限值。

合理使用索引,對於常用於查詢的字段進行設定索引,對於經常更新的表避免使用太多的索引。若資料量較小也不必使用索引,可能不會起到作用。

1).單值索引:乙個索引只能包含乙個列,乙個表可以有多個單值索引。

2).唯一索引:索引列的值必須唯一,但允許有空值。

3).復合索引:即乙個索引包含多個列

建立索引:create [unique|fulltext|spatial] index xd_dog_name [using index_type] on dog

檢視索引

create index 索引名稱 on 表名(欄位名稱)

刪除索引

show index from 表名

修改表索引:

drop index 索引名稱 on 表名

為表中列新增乙個主鍵索引。

alert table 表名 add primary key(欄位名)

為表中列新增乙個唯一索引(字段值必須唯一,可以有n個null)。

alert table 表名 add unique 索引名稱(欄位名)

為表中列新增乙個普通索引。

alert table 表名 add index 索引名稱(欄位名稱)

為表中列新增乙個全文索引。

alert table 表名 add fulltext 索引名稱(欄位名稱)

1).對查詢操作多且資料量大的表建立索引。

2).索引欄位的選擇最佳候選應當從where語句子條件提取。

3).索引並不是越多越好,尤其增刪改操作越多,維護索引的成本就越高。

4).若有過多索引mysql會出現選擇困難症,雖然最後會選擇乙個有效的索引,但無疑增加了時間消耗。

5).使用唯一索引,區分度越高檢索效率越高。

6).使用短索引,索引建立後也是用硬碟儲存,可提公升索引訪問的io效率,也可提公升總體效率。

7).利用最左索引,使用復合索引建立的索引,只要包含建立時的第乙個欄位就可以使用索引。

如:id name age 搜尋id的時候可使用索引、搜尋id name的時候也可使用索引、搜尋id name age的時候也可以使用索引

新的一年新氣象,new出物件不重樣

樹狀陣列 求逆序對個數(初學者都能看懂)

在網上翻看了一些部落格,感覺大體對於樹狀陣列求逆序對的講解不夠詳細,那些部落格,更多像是給已經學會逆序對的人複習用的。而初學者,可能要冥思苦想。接下來,我便從乙個初學者的角度,來一步步的,講解一下由樹狀陣列求逆序對。需要的前置知識只有,會線段陣列的基本應用。單點更新,區間查詢,求lowbit。先貼樹...

新手都能看懂的Dubbo!

1.dubbo架構 上述節點簡單說明 呼叫關係說明 1.服務容器負責啟動,載入,執行服務提供者。2.服務提供者在啟動時,向註冊中心註冊自己提供的服務。3.服務消費者在啟動時,向註冊中心訂閱自己所需的服務。4.註冊中心返回服務提供者位址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者...

小白都能看懂的block

首先說明一下,我自己也是乙個小白 這是我對block的一點認識或總結,有不對的地方,希望大家指出來 block就是乙個 塊,用來執行一小段程式的,通常我們定義乙個block 可以用它的基本模型,返回值型別 變數的名字 引數型別 例如 int myblock int 這就是定義了乙個block 這個變...