创建和删除索引的方法

正文实例陈诉了MySQL查看、创造和删除索引的不二法门。分享给大家供我们参考。具体如下:

1.索引功效

在索引列上,除了上边提到的坚不可摧查找之外,数据库利用精彩纷呈的高效稳定本领,可以大大进步查询效用。非常是当数据量相当大,查询涉及八个表时,使用索引往往能使查询速度加快不知凡几倍。

例如,有3个未索引的表t1、t2、t3,分别只含有列c1、c2、c3,每种表分别满含1000行数据整合,指为1~1000的数值,查找对应值相等行的查询如下所示。

SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3
此询问结果应为1000行,每行蕴涵3个特别的值。在无索引的意况下管理此询问,必得找出3个表全部的结合,以便得出与WHERE子句相称的那多少个行。而大概的构成数目为1000×1000×1000(十亿),分明查询将会非常的慢。

假设对各种表实行索引,就能够非常大地加速查询进程。利用索引的询问管理如下。

(1)从表t1中精选第后生可畏行,查看此行所蕴藏的数额。
(2)使用表t2上的目录,直接定位t2中与t1的值十一分的行。相同,利用表t3上的目录,直接定位t3中与来自t1的值非常的行。
(3)扫描表t1的下黄金时代行一视同仁新后面包车型客车长河,直到遍历t1中有着的行。

在这情景下,依旧对表t1施行了叁个完全扫描,但亦可在表t2和t3上进展索引查找直接收取那一个表中的行,比未用索引时要快一百万倍。
动用索引,MySQL加速了WHERE子句满足条件行的物色,而在多表连接查询时,在进行连接时加快了与任何表中的行相配的快慢。

2.  创办索引

在实施CREATE TABLE语句时能够成立索引,也得以独立用CREATE INDEX或ALTER
TABLE来为表扩展索引。

1.ALTER TABLE

ALTERAV4 TABLE用来创制普通索引、UNIQUE索引或P本田UR-VIMASportageY KEY索引。

ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

其中table_name是要加进索引的表名,column_list提出对什么样列实行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将依赖第贰个索引列赋一个名号。此外,ALTER
TABLE允许在单个语句中改变四个表,由此能够在同有毛病间创设八个目录。

2.CREATE INDEX

CREATE INDEX可对表扩张日常性索引或UNIQUE索引。

CREATE INDEX index_name ON table_name (column_list)
CREATE UNIQUE INDEX index_name ON table_name (column_list)

table_name、index_name和column_list具备与ALTER
TABLE语句中平等的意义,索引名不可选。此外,不可能用CREATE
INDEX语句创造PCRUISERIMAHavalY KEY索引。

3.索引类型

在创立索引时,能够规定索引能还是不能富含重复值。假设不带有,则索引应该创造为PGL450IMAPAJEROY
KEY或UNIQUE索引。对于单列惟风流倜傥性索引,那保证单列不分包重复的值。对于多列惟黄金时代性索引,保证三个值的咬合不重复。

PHighlanderIMA牧马人Y KEY索引和UNIQUE索引特别相近。事实上,PHavalIMARubiconY
KEY索引仅是叁个有所名称P智跑IMA揽胜Y的UNIQUE索引。那意味着三个表只可以包蕴一个PENCOREIMA奇骏Y
KEY,因为二个表中不容许持有多个同名的目录。

下面的SQL语句对students表在sid上添加PRIMARY KEY索引。

ALTER TABLE students ADD PRIMARY KEY (sid)

4.  剔除索引

可利用ALTERAV4 TABLE或DROP INDEX语句来删除索引。相通于CREATE
INDEX语句,DROP INDEX能够在ALTE奥迪Q7 TABLE内部作为一条语句管理,语法如下。

DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY

其间,前两条语句是等价的,删除掉table_name中的索引index_name。
第3条语句只在剔除PEnclaveIMAEvoqueY KEY索引时使用,因为二个表只也有二个PHavalIMA库罗德Y
KEY索引,因而无需钦赐索引名。若无创建P宝马7系IMATiggoY
KEY索引,但表具有二个或五个UNIQUE索引,则MySQL将去除第叁个UNIQUE索引。
如果从表中删除了某列,则索引会受到震慑。对于多列组合的目录,假如剔除在那之中的某列,则该列也会从索引中删除。借使除去组成索引的兼具列,则全体索引将被删除。

5.查看索引

mysql> show index from tblname;
mysql> show keys from tblname;

· Table
表的称呼。
· Non_unique
只要索引不可能包罗重复词,则为0。假如能够,则为1。
· Key_name
目录的称呼。
· Seq_in_index
目录中的列类别号,从1早先。
· Column_name
列名称。
· Collation
列以什么艺术存款和储蓄在目录中。在MySQL中,有值‘A’(升序)或NULL(无分类)。
· Cardinality
目录中独占鳌头值的数额的估算值。通过运营ANALYZE TABLE或myisamchk
-a能够改善。基数依照被储存为整数的总结数据来计数,所以就算对于Mini表,该值也未尝须要是可信的。基数越大,当举办同步时,MySQL使用该索引的机遇就越大。
· Sub_part
假定列只是被一些地编入索引,则为被编入索引的字符的数据。如若整列被编入索引,则为NULL。
· Packed
指令关键字怎么被减少。若无被减弱,则为NULL。
· Null
设若列含有NULL,则含有YES。若无,则该列含有NO。
· Index_type
用过的目录方法(BTREE, FULLTEXT, HASH, RTREE)。
· Comment

期望本文所述对大家的MySQL数据库程序设计具备利于。

发表评论

电子邮件地址不会被公开。 必填项已用*标注