MySql儲存引擎和索引

2021-10-05 07:04:19 字數 3253 閱讀 8742

mysql的儲存引擎表示的是mysql中資料庫表的儲存型別,不同儲存型別,表的儲存方式都不相同。

檢視當前mysql版本支援哪些引擎,可以輸入以下命令:

mysql>

show engines\g

可以發現有很多儲存引擎,這裡只討論innodb、myisam、memory這三種。

innodb

innodb的表儲存成3個檔案。檔案的名字與表名相同。拓展名為frm、idb,.frm儲存表的結構, .idb儲存表的資料和索引

myisam

myisam的表儲存成3個檔案。檔案的名字與表名相同。拓展名為frm、myd、myi,

.frm儲存表的結構 ,.myi表的索引, .myd表的資料

memory

memory是mysql中一類特殊的儲存引擎。它使用儲存在記憶體中的內容來建立表,而且資料全部放在記憶體中。

總結:方式一:在建立表的時候指定儲存引擎

create

table table_name (

屬性名 資料型別 完整性約束,..

.屬性名 資料型別 完整性約束

)engine

=innodb

default

charset

=utf8;

方式二:修改已存在表的儲存引擎

alter

table table_name engine

=innodb

;

方式三:修改配置檔案

mysql server啟動的時候都會載入乙個配置檔案,windows下是my.ini檔案,linux下是my.cnf檔案,開啟配置檔案,在[mysqld]下面新增如下內容,儲存,重啟mysql server伺服器,預設就採用配置項指定的儲存引擎了。記得操作之後一定要儲存再重新啟動mysql服務

索引是建立在表上,是對資料庫表中一列或多列的值進行排序的一種結構。索引和表中屬性有很大關係,要通過屬性排序後的結果建立結構。

索引結構儲存在檔案中:innodb引擎下:.ibd檔案 myisam:.myi檔案。

索引有兩種儲存型別:b樹形索引 、雜湊索引;innodb和myisam儲存引擎支援b樹形索引,memory支援b樹形索引、雜湊索引,預設b樹形索引。

索引的優點:提高查詢速度

索引的缺點:索引需要占用物理空間 ,索引儲存在檔案中,索引多了,儲存的資料變少了,建立和維護索引需要耗費時間 頻繁修改表中資料,也會造成索引結構的頻繁修改,消耗時間,效能降低。

普通索引:建立普通索引時,不新增任何限制條件,對屬性完整性約束沒有要求

(建立表的同時建立索引)

create

table table_name(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

index

(屬性名)

);

唯一性索引:使用unique引數設定索引為唯一性索引。必須保證屬性是唯一的(即屬性有主鍵約束或者唯一性約束)。主鍵是特殊的唯一性索引

(建立表的同時建立索引)

create

table 表名(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

unique

index 索引名(屬性名)

);

全文索引:使用fulltext引數設定索引為全文索引。全文索引只能建立在char、varchar、text型別的字段上。查詢資料量較大的字串型別字段,使用全文索引可以提高查詢效率.只有myisam儲存引擎支援全文索引。

(建立表的同時建立索引)

create

table 表名(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

fulltext index 索引名(屬性名)

)engine

=myisam;

單列索引:在表中單個字段建立索引。單列索引只根據該列進行查詢

(建立表的同時建立索引)

create

table 表名(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

index 索引名(屬性名)

);

多列索引:在表中多個字段建立索引。

(建立表的同時建立索引)

create

table 表名(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

index 索引名(屬性名1

,屬性名2,...

));

空間索引:使用spatial引數設定索引為空間索引。空間索引只能建立在空間資料類上。

空間資料型別包括geometry、point、linestring、polygon等。只有myisam儲存引擎支援空間資料檢索,且索引字段不能為空值。

create

table 表名(

屬性名 資料型別 完整性約束,..

..屬性名 資料型別 完整性約束,

spatial index 索引名(屬性名)

)engine

=myisam;

在已存在的表上建立索引

create

(unique\fulltext\spatial)

index 索引名 on 表名 (屬性名);

alter

table 表名 add

(unique\fulltext\spatial)

index 索引名(屬性名);

刪除索引:

drop

index 索引名 on 表名;

(1)如果表中的資料較少,不需要建立索引

(2)選擇唯一性索引。屬性不重複

(3)為經常需要排序、分組和聯合操作的字段建立索引

(4)為經常作為查詢條件的字段建立索引

(5)限制索引的數目

(6)盡量使用資料量少的索引

(7)盡量使用字首來索引

(8)刪除不再使用或使用很少的索引

MySQL的索引和儲存引擎

參考文章內容 mysql索引 黃文博 mysql入門教程 mysql tutorial book 二 關於索引 資料庫儲存引擎是資料庫底層軟體組織,資料庫管理系統 dbms 使用資料引擎進行建立 查詢 更新和刪除資料。不同的儲存引擎提供不同的儲存機制 索引技巧 鎖定水平等功能,使用不同的儲存引擎,還...

MySQL索引 事務 儲存引擎

索引建立的方法 建立索引的原則依據 檢視索引的方法 刪除索引的方法 事務的概念 事務的acid特點 事務控制語句 事務的控制方法 儲存引擎概念介紹 業選擇儲存引擎依據 修改儲存引擎 注 no unique為0 注 no unique為1 注 屬於唯一性索引的一種 直接建立索引 修改表結構方式新增索引...

MySQL索引和引擎

在使用mysql或其他資料庫的時候,往往需要給表新增索引,這樣一般可以給資料的查詢速度帶來極大的提公升。索引,可以理解成一本書的目錄,用於快速了解和定位書本中的內容。而在mysql中,索引是幫助其高效獲取資料的 已排好序的資料結構 比如現在,mysql中有這麼一張表 test,需要進行查詢 sele...