mysql索引可以分为几种?
MySQL索引的建立對(duì)于MySQL的高效運(yùn)行是很重要的,索引可以大大提高M(jìn)ySQL的檢索速度。
打個(gè)比方,如果合理的設(shè)計(jì)且使用索引的MySQL是一輛蘭博基尼的話,那么沒有設(shè)計(jì)和使用索引的MySQL就是一個(gè)人力三輪車。
拿漢語字典的目錄頁(索引)打比方,我們可以按拼音、筆畫、偏旁部首等排序的目錄(索引)快速查找到需要的字。
索引分單列索引和組合索引。單列索引,即一個(gè)索引只包含單個(gè)列,一個(gè)表可以有多個(gè)單列索引,但這不是組合索引。組合索引,即一個(gè)索引包含多個(gè)列。
創(chuàng)建索引時(shí),你需要確保該索引是應(yīng)用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。
實(shí)際上,索引也是一張表,該表保存了主鍵與索引字段,并指向?qū)嶓w表的記錄。
上面都在說使用索引的好處,但過多的使用索引將會(huì)造成濫用。因此索引也會(huì)有它的缺點(diǎn):雖然索引大大提高了查詢速度,同時(shí)卻會(huì)降低更新表的速度,如對(duì)表進(jìn)行INSERT、UPDATE和DELETE。因?yàn)楦卤頃r(shí),MySQL不僅要保存數(shù)據(jù),還要保存一下索引文件。
建立索引會(huì)占用磁盤空間的索引文件。
mysql索引的分類
MySQL索引分為普通索引、唯一索引、主鍵索引、組合索引、全文索引。索引不會(huì)包含有null值的列,索引項(xiàng)可以為null(唯一索引、組合索引等),但是只要列中有null值就不會(huì)被包含在索引中。
(1)普通索引:create index index_name on table(column);
或者創(chuàng)建表時(shí)指定,create table(..., index index_name column);
(2)唯一索引:類似普通索引,索引列的值必須唯一(可以為空,這點(diǎn)和主鍵索引不同)
create unique index index_name on table(column);或者創(chuàng)建表時(shí)指定unique index_name?column
(3)主鍵索引:特殊的唯一索引,不允許為空,只能有一個(gè),一般是在建表時(shí)指定primary key(column)
(4)組合索引:在多個(gè)字段上創(chuàng)建索引,遵循最左前綴原則。alter table t add index index_name(a,b,c);
(5)全文索引:主要用來查找文本中的關(guān)鍵字,不是直接與索引中的值相比較,像是一個(gè)搜索引擎,配合match against使用,現(xiàn)在只有char,varchar,text上可以創(chuàng)建全文索引。在數(shù)據(jù)量較大時(shí),先將數(shù)據(jù)放在一張沒有全文索引的表里,然后再利用create index創(chuàng)建全文索引,比先生成全文索引再插入數(shù)據(jù)快很多。
更多相關(guān)知識(shí),請(qǐng)?jiān)L問 PHP中文網(wǎng)!!
總結(jié)
以上是生活随笔為你收集整理的mysql索引可以分为几种?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jvm类加载过程有哪些阶段(类的加载过程
- 下一篇: Unity之协程(从Unity)