mysql的索引詳細介紹及其使用

2021-09-05 01:36:42 字數 3087 閱讀 5673

首先介紹幾個關於mysql的基礎知識,後面介紹索引時會使用到的基礎知識

1.mysql的儲存引擎:分為兩種, innodb和myisam

區別: 主要的區別是innodb適合頻繁寫資料庫操作,myisam適合讀取資料庫的情況多一點。

在表的過程中出現了一點小插曲,出現了中文亂碼問題 ,解決方法就順便帶上了

2.mysql資料庫出現中文亂碼問題時需要修改資料庫的編碼:

#檢視當前資料庫的編碼

show variables like 『character%』;

#修改資料庫的編碼

alter database 資料庫名稱 character set utf8;

3.mysql中查詢空值和非空值的方法:

select * from user where phone is not null;

select * from user where phone is null;

4.mysql中的blob型別: 可以儲存大量資料的容器(如,**等等),tinyblob 最大 255b blob 最大 65k mediumblob 最大 16m longblob 最大 4g

5.mysql中的text型別:tinytext: 256 bytes text: 65,535 bytes => ~64kb mediumtext: 16,777,215 bytes => ~16mb longtext: 4,294,967,295 bytes => ~4gb

6.查詢建表語句:show create table 表名

7.增加表中的列: alter table [表名] add 欄位名 資料型別 [null]

8.刪除列:alter table 表名 drop column 列名;

9.在查詢表中所有的索引(show index from 表名)時,查詢結果表中的各欄位代表的含義:

table:表名

non_unique: 如果索引不能包括重複詞,則為0。如果可以,則為1。

key_name:索引名

seq_in_index:索引中的列序列號,從1開始

column_name:列名

collation:列以什麼方式儲存在索引中,'a』公升序,'null』無分類

cardinality:索引基數

sub_part: 如果列只是被部分地編入索引,則為被編入索引的字元的數目。如果整列被編入索引,則為null。

packed: 指示關鍵字如何被壓縮。如果沒有被壓縮,則為null

null:如果列可以為null,則yes。如果不可以,則no。

index_type: 所用索引儲存方法(btree, fulltext, hash, rtree)

b樹索引具有範圍查詢和字首查詢的能力,對於有n節點的b樹,檢索一條記錄的複雜度為o(logn)。相當於二分查詢。

雜湊索引只能做等於查詢,但是無論多大的hash表,查詢複雜度都是o(1)。

顯然,如果值的差異性大,並且以等值查詢(=、 <、>、in)為主,hash索引是更高效的選擇,它有o(1)的查詢複雜度。

如果值的差異性相對較差,並且以範圍查詢為主,b樹是更好的選擇,它支援範圍查詢

10.建立索引的方式:a.create index indexname on 『tablename』(『欄位名(長度)』)

b. alter table tablename add index indexname(欄位名(length))(可以為多個列新增相同索引)

其中text和blob兩種資料型別必須指定長度

11.新增唯一索引: a.create unique index indexname ontablename(欄位名(length));

b.alter table tablename add unique (column_list)(可以為多個列新增相同索引)

12.刪除索引: drop index index_name on table_name; 唯一索引要求所有的類的值是唯一的,這一點和主鍵索引一樣.但是他允許有空值

13.主鍵索引: 主鍵索引,不允許有空值

14. 組合索引: 乙個表中含有多個單列索引不代表是組合索引,通俗一點講 組合索引是:包含多個字段但是只有索引名稱

create index indexname ontablename(欄位名(length),欄位名(length),…);

15.全文索引:alter table tablename add fulltext(column1, column2)

16.全文索引使用的條件:a. 字段型別必須是char,varchar,text

b.在需要使用mysql的全文索引(fulltext index)的時候,這張表的資料庫引擎必須是myisam型別

c.修改表的儲存引擎:alter tablewp_postsengine = myisam;

17.mysql索引失效的情況: a.單列索引無法儲null值,復合索引無法儲全為null的值

b. 不適合重複資料較多的列

c.前導模糊查詢不能利用索引(like '%xx』或者like 『%xx%』)

d. 如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引

e. 對於多列索引,不是使用的第一部分,則不會使用索引

例如:create index index1 on table1(column1,column2,column3)

生效的情況:a.select * from where column1=1 and column2=2 and column3=1;

b.select * from where column1=1 and column2=2

c.select * from where column1=1 and column3=1;

d.select * from where column1=1;

不生效情況:a.select * from where column2=2 and column3=1;

b. select * from where column2=2 ;

c. select * from where column3=1;

mysql索引詳細介紹簡書 Mysql索引介紹

資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。為表設...

索引詳細介紹

資料庫索引到底是什麼,是怎樣工作的?現在假設我們要從這個表中查詢出所有名字是 jesus 的雇員資訊。我們決定使用下面的查詢語句 select from employee where employee name jesus 如果表中沒有所以會發生什麼?一旦我們執行這個查詢,在查詢名字為jesus的雇...

MYSQL索引無效和索引有效的詳細介紹

1 where字句的查詢條件裡有不等於號 where column mysql將無法使用索引 2 類似地,如果where字句的查詢條件裡使用了函式 如 where day column mysql將無法使用索引 3 在join操作中 需要從多個資料表提取資料時 mysql只有在主鍵和外來鍵的資料型別...