首先介紹幾個關於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_posts
engine = 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只有在主鍵和外來鍵的資料型別...