久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL數據庫索引原理及優化策略是什么

167次閱讀
沒有評論

共計 2619 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章主要介紹“MySQL 數據庫索引原理及優化策略是什么”的相關知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MySQL 數據庫索引原理及優化策略是什么”文章能幫助大家解決問題。

1 索引索引概念

索引是一種特殊的文件,包含著對數據表里所有記錄的引用指針。可以對表中的一列或多列創建索引,并指定索引的類型,各類索引有各自的數據結構實現。

索引作用

數據庫中的表、數據、索引之間的關系,類似于書架上的圖書、書籍內容和書籍目錄的關系,索引所起的作用類似書籍目錄,可用于快速定位、檢索數據。索引可以極大地提高數據庫的性能。

索引的使用場景

要考慮對數據庫表的某列或某幾列創建索引,需要考慮以下幾點:

數據量較大,且經常對這些列進行條件查詢。

該數據庫表的插入操作,及對這些列的修改操作頻率較低。

索引會占用額外的磁盤空間。

2 索引分類

從索引存儲結構劃分:BTree 索引、Hash 索引、FULLTEXT 全文索引、RTree 索引

從應用層次劃分:普通索引,唯一索引,主鍵索引,復合索引

從索引鍵值類型劃分,主鍵索引,輔助索引(二級索引)

從數據存儲和索引鍵值邏輯關系劃分:聚集索引(聚簇索引)非聚集泰引(非聚簇索 )

從索引列數量劃分:單列索引,復合索引

B 樹索引和 B + 樹索引區別

區別:

數據的保存位置不同:B+ 樹保存在葉子節點,B 樹保存在所有的節點中

體現出 B + 樹優勢:節點不存儲 data,這樣一個節點就可以存儲更多的 key。可以使得樹更矮,所以 IO 操作次數更少。查詢性能穩定:每次查詢都是從根節點遍歷到葉子節點,查詢路徑長度相同,即每次查詢效率相當,時間復雜度固定是 O(log(n))

葉子節點的指向:B+ 樹相鄰的葉子節點通過指針相連,B 樹沒有

體現出 B + 樹優勢:所有葉子節點形成有序鏈表,便于范圍查找

3 索引操作創建主鍵索引

--  在創建表的時候,直接在字段名后指定  primary key
create table user1(id int primary key, name varchar(30));
--  在創建表的最后,指定某列或某幾列為主鍵索引
create table user2(id int, name varchar(30), primary key(id));
--  創建表以后再添加主鍵
create table user3(id int, name varchar(30));
alter table user3 add primary key(id);

主鍵索引的特點:

一個表中,最多有一個主鍵索引,當然可以使符合主鍵

主鍵索引的效率高(主鍵不可重復)

創建主鍵索引的列,它的值不能為 null,且不能重復

主鍵索引的列基本上是 int

唯一索引的創建

--  在表定義時,在某列后直接指定 unique 唯一屬性。create table user4(id int primary key, name varchar(30) unique);
--  創建表時,在表的后面指定某列或某幾列為 unique
create table user5(id int primary key, name varchar(30), unique(name));
--  創建表以后再添加 unique
create table user6(id int primary key, name varchar(30));alter table user6 add unique(name);

唯一索引的特點:

一個表中,可以有多個唯一索引

查詢效率高

如果在某一列建立唯一索引,必須保證這列不能有重復數據

如果一個唯一索引上指定 not null,等價于主鍵索引

普通索引的創建

-- 在表的定義最后,指定某列為索引
create table user8(id int primary key,
name varchar(20),
email varchar(30),
index(name)
-- 創建完表以后指定某列為普通索引
create table user9(id int primary key, name varchar(20), email varchar(30));
alter table user9 add index(name); 
--  創建一個索引名為  idx_name  的索引
create table user10(id int primary key, name varchar(20), email varchar(30));
create index idx_name on user10(name);

普通索引的特點:

一個表中可以有多個普通索引,普通索引在實際開發中用的比較多

如果某列需要創建索引,但是該列有重復的值,那么我們就應該使用普通索引

查詢索引

show keys from 表名

mysql show keys from goods\G
*********** 1. row ***********
Table: goods = 表名
Non_unique: 0 = 0 表示唯一索引
Key_name: PRIMARY = 主鍵索引
Seq_in_index: 1
Column_name: goods_id = 索引在哪列
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null:
Index_type: BTREE = 以二叉樹形式的索引
Comment:
1 row in set (0.00 sec)

show index from 表名;

desc 表名

刪除索引

刪除主鍵索引:alter table 表名 drop primary key;

其他索引的刪除:alter table 表名 drop index 索引名;索引名就是 show keys from 表名中的 Key_name 字段

mysql  alter table user10 drop index idx_name;

drop index 索引名 on 表名

mysql  drop index name on user8

索引創建原則

比較頻繁作為查詢條件的字段應該創建索引

唯一性太差的字段不適合單獨創建索引,即使頻繁作為查詢條件

更新非常頻繁的字段不適合作創建索引

不會出現在 where 子句中的字段不該創建索引

關于“MySQL 數據庫索引原理及優化策略是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注丸趣 TV 行業資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計2619字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 类乌齐县| 平塘县| 皮山县| 泌阳县| 南平市| 德令哈市| 稻城县| 安阳县| 寻乌县| 阳高县| 阿克陶县| 屯昌县| 息烽县| 保康县| 牡丹江市| 宜兰市| 临高县| 逊克县| 金沙县| 武川县| 文登市| 庆元县| 高州市| 沙雅县| 额尔古纳市| 改则县| 花莲县| 南皮县| 寿阳县| 武强县| 石景山区| 高安市| 都昌县| 乌拉特前旗| 张北县| 定西市| 中江县| 铁岭县| 彝良县| 仙桃市| 浮梁县|