1.索引
在關聯式資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容
2.索引的作用
1.大大加快資料的檢索速度;
2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;
3.加速表和表之間的連線;
4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。
3.常用的索引有哪些
mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引
primary key(主鍵索引) alter table `table_name` add primary key ( `col` )
unique(唯一索引) alter table `table_name` add unique (`col`)
index(普通索引) alter table `table_name` add index index_name (`col`)
fulltext(全文索引) alter table `table_name` add fulltext ( `col` )
組合索引 alter table `table_name` add index index_name (`col1`, `col2`, `col3` )
4.mysql各種索引區別:
普通索引:最基本的索引,沒有任何限制
唯一索引:與"普通索引"類似,不同的就是:索引列的值必須唯一,但允許有空值。
主鍵索引:它 是一種特殊的唯一索引,不允許有空值。
全文索引:僅可用於 myisam 表,針對較大的資料,生成全文索引很耗時好空間。
5.索引的語法:建表時指定\追加索引\刪除索引
(1)使用alter table語句建立索引。 語法如下:
alter table table_name add unique (column_list) ;
其中包括普通索引、unique索引和primary key索引3種建立索引的格式,table_name是要增加索引的表名,column_list指出對哪些列進行索引,多列時各列之間用逗號分隔。索引名index_name可選,預設時,mysql將根據第乙個索引列賦乙個名稱。另外,alter table允許在單個語句中更改多個表,因此可以同時建立多個索引。
(2)使用create index語句對錶增加索引。
建表時增加索引(以唯一索引為例)
create table tablename(
columnname int,
unique key(columnname)
單獨建議唯一索引
create unique index index_name on table_name (column_list) ;
說明:table_name、index_name和column_list具有與alter table語句中相同的含義,索引名不可選。另外,不能用create index語句建立primary key索引。
(3)刪除索引
alter table tablename drop index columnname; 刪除唯一索引
6.如何查詢索引的使用情況
通過show status like '%handler_read%'方法檢視:整體
handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。
handler_read_rnd_next:這個值越高,說明查詢低效。
2.使用explain檢視具體某乙個sql的索引使用情況 :
7.索引的不足
1.在建立索引和維護索引 會耗費時間,隨著資料量的增加而增加
2.索引檔案會占用物理空間,除了資料表需要占用物理空間之外,每乙個索引還會占用一定的物理空間
3.當對表的資料進行 insert,update,delete 的時候,索引也要動態的維護,這樣就會降低資料的維護速度,(建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會膨脹很快)。
8.注意事項
1.在經常需要搜尋的列上,可以加快索引的速度
2.主鍵列上可以確保列的唯一性
3.在表與表的而連線條件上加上索引,可以加快連線查詢的速度
4.在經常需要排序(order by),分組(group by)和的distinct 列上加索引 可以加快排序查詢的時間, (單獨order by 用不了索引,索引考慮加where 或加limit)
5.在一些where 之後的 < <= > >= between in 以及某個情況下的like 建立欄位的索引(b-tree)
6.like語句的 如果你對nickname欄位建立了乙個索引.當查詢的時候的語句是 nickname lick '%abc%' 那麼這個索引講不會起到作用.而nickname lick 'abc%' 那麼將可以用到索引
7.索引不會包含null列,如果列中包含null值都將不會被包含在索引中,復合索引中如果有一列含有null值那麼這個組合索引都將失效,一般需要給預設值0或者 ' '字串
8.使用短索引,如果你的乙個欄位是char(32)或者int(32),在建立索引的時候指定字首長度 比如前10個字元 (前提是多數值是唯一的..)那麼短索引可以提高查詢速度,並且可以減少磁碟的空間,也可以減少i/0操作.
9.不要在列上進行運算,這樣會使得mysql索引失效,也會進行全表掃瞄
10.選擇越小的資料型別越好,因為通常越小的資料型別通常在磁碟,記憶體,cpu,快取中 占用的空間很少,處理起來更快
9.索引方式 hash和 btree比較
(1)hash
用於對等比較,如"="和" <=>"
(2)btree
btree索引看名字就知道索引以樹形結構儲存,通常用在像 "=,>,>=,
通過比較發現,我們常用的是btree索引方式,當然mysql預設就是btree方式。
最常用的MySQL命令語句
e良師益友網 通過cmd連線mysql mysql uroot p123456 需要配置path環境變數 c program files mysql mysql server 5.6 bin 建立資料庫並使用utf8編碼 create database utf8 test default chara...
mysq建立索引的優缺點
建立索引的優點及必要性 第一 通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性 第二 可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因 第三 可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義 第四 在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和...
MySQL索引常用演算法
mysql的索引常用的演算法是b tree和b tree 如何去學些這兩個演算法,我看了很多文章列舉如下 1.b tree定義 2.b tree動態演示 btree差不多了解了,btree和b tree幾乎一樣 3.mysql索引背後的資料結構及演算法原理 4.理解mysql 索引與優化 5.其他 ...