本文主要介绍了在MySQL中查看、创建和删除索引的方法,并结合实例详细分析了索引在MySQL中的作用,以及查看、创建和删除索引的相关实现技巧,具有一定的参考价值,有需要的朋友可以参考一下。
本文阐述了MySQL查看、创建和删除索引的方法。分享给你,供你参考。如下所示:
1索引作用
在索引栏上,除了上面提到的有序搜索,数据库还可以通过使用各种快速定位技术,大大提高查询效率。尤其是当数据量非常大,查询涉及多个表时,索引的使用往往可以使查询速度提高上千倍。
例如,有三个未索引的表t1、t2和t3,它们分别只包含列c1、c2和c3。每个表包含1000行数据,分别引用1 ~ 1000的值。用于查找具有相同对应值的行的查询如下所示。
从t1,t2,t3中选择c1,c2,c3,其中c1=c2,c1=c3
查询结果应该是1000行,每行包含3个相等的值。要在没有索引的情况下处理该查询,必须找到三个表的所有组合,以便获得与WHERE子句匹配的那些行。虽然可能的组合数量是100010001000(十亿),但显然查询会非常慢。
如果每个表都有索引,查询过程可以大大加快。使用索引的查询处理如下。
(1)从表t1中选择第一行,以查看该行中包含的数据。
(2)使用表t2上的索引直接定位t2中与t1的值匹配的行。类似地,表t3上的索引用于直接定位t3中与t1中的值匹配的行。
(3)扫描表t1的下一行,并重复前面的过程,直到t1中的所有行都被遍历。
在这种情况下,仍然执行对表t1的完整扫描,但是对表t2和t3的索引查找可以直接获取这些表中的行,这比不使用索引时快一百万倍。
利用索引,MySQL加快了子句满足条件的行的查找,而在多表连接查询中,执行连接时加快了与其他表中行的匹配。
2. 创建索引
可以在执行CREATE TABLE语句时创建索引,也可以单独使用CREATE INDEX或ALTER TABLE向表中添加索引。
1.更改表格
ALTER TABLE用于创建普通索引、唯一索引或主键索引。
ALTER TABLE TABLE _ name ADD INDEX INDEX _ name(column _ list)
ALTER TABLE TABLE _ name ADD UNIQUE(column _ list)
ALTER TABLE table_name添加主键(column_list)
其中,table_name是要索引的表的名称,column_list指示要索引的列。当有多列时,各列用逗号分隔。名称index_name是可选的。默认情况下,MySQL会根据第一个索引列分配一个名称。此外,ALTER TABLE允许您在一条语句中更改多个表,因此您可以同时创建多个索引。
2.创建索引
CREATE INDEX可以向表中添加公共索引或唯一索引。
对table_name (column_list)创建索引index_name
在table_name (column_list)上创建唯一索引index_name
Table_name、index_name和column_list与ALTER TABLE语句中的含义相同,并且索引名称不是可选的。此外,不能用CREATE INDEX语句创建主键索引。
3索引类型
创建索引时,可以指定索引是否可以包含重复值。否则,应该将索引创建为主键或唯一索引。对于单列唯一索引,这保证了单列不包含重复值。对于多列唯一索引,保证多个值的组合不重复。
主键索引与唯一索引非常相似。实际上,主键索引只是一个名为PRIMARY的唯一索引。这意味着这个表只能包含一个主键,因为在一个表中不可能有两个同名的索引。
以下SQL语句将主键索引添加到sid上的students表中。
复制代码如下:alter table students添加主键(SID)
4. 删除索引
可以使用ALTER TABLE或DROP INDEX语句删除索引。与CREATE INDEX语句类似,DROP INDEX可以被视为ALTER TABLE内部的语句,语法如下。
删除表名中的索引index_name
ALTER TABLE table_name删除索引index_name
ALTER TABLE table_name删除主键
前两个语句是等效的,table_name中的索引index_name被删除。
第三个语句只在删除主键索引时使用,因为一个表只能有一个主键索引,所以不需要指定索引名。如果没有创建主键索引,但是表有一个或多个唯一索引,MySQL将删除第一个唯一索引。
如果从表中删除一列,索引将受到影响。对于包含多列的索引,如果删除其中一列,该列也将从索引中删除。如果删除构成索引的所有列,整个索引将被删除。
5查看索引
mysql显示tblname的索引;
mysql显示tblname中的键;
桌子
表的名称。
非唯一
如果索引不能包含重复的单词,则为0。如果是,就是1。
Key_name
索引的名称。
序列索引
索引中列的序列号,从1开始。
列名
列名。
校对
列在索引中的存储方式。在MySQL中,有一个值‘a’(升序)或NULL(无分类)。
基数
对索引中唯一值数量的估计。您可以通过运行ANALYZE TABLE或myisamchk -a来更新它.基数是根据存储为整数的统计数据来计算的,所以即使对于小表,这个值也不一定准确。基数越大,MySQL在执行union时使用索引的机会就越大。
子零件
如果列只是部分索引,则为索引字符数。如果整个列都有索引,则为NULL。
包装
指示如何压缩关键字。如果没有压缩,则为空。
空
如果该列包含NULL,则它包含YES。如果不是,则该列包含“否”
索引类型
使用的索引方法(BTREE、FULLTEXT、HASH、RTREE)。
评论
补充:针对SQL语句的查看与处理,本站还提供了SQL语句在线格式化美化工具供大家参考使用:
SQL代码在线格式化美化工具
:http://tools.jb51.net/code/sqlcodeformat希望这篇文章对大家的MySQL数据库编程有所帮助。