创建与删除索引

创建与删除索引

 

索引是加速查询的主要手段,特别对于涉及多个表的查询更是如此。本节中,将介绍索引的作用、特点,以及创建和删除索引的语法。
13.4.1  使用索引优化查询
索引是高速定位数据的技术,首先通过一个演示样例来了解其含义及作用,具体的介绍请參考第14章。
1.索引演示样例
如果对于10.3节所建的表,各个表上都没有索引,数据的排列也没有规律,如表13.3所看到的。
表13.3                                                     没有索引的students表
sid
sname
sgender
sage
52
zhang
M
21
22
wang
M
22
33
li
F
19
41
zhao
M
20
 
 
当查找某个学生信息时,必须顺序查看表students中的每一行,检查是否与所需值匹配,这须要扫描全表,效率非常低。
表13.4给出了在name列上添加�了索引的students表。
表13.4                                        在name列上添加�了索引的students表
<span>创建与删除索引</span>
 
索引是在
name
上排序的。如今,当查找某个学生信息时,就不须要逐行搜索全表,能够利用索引进行有序查找(如二分查找法),并高速定位到匹配的值,以节省大量搜索时间。
2.索引作用
在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的高速定位技术,可以大大提高查询效率。特别是当数据量很大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。
比如,有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子句满足条件行的搜索,而在多表连接查询时,在运行连接时加快了与其它表中的行匹配的速度。
13.4.2  创建索引
在运行CREATE TABLE语句时能够创建索引,也能够单独用CREATE INDEX或ALTER TABLE来为表添加�索引。
1.ALTER TABLE
ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY 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语句创建PRIMARY KEY索引。
3.索引类型
在创建索引时,能够规定索引是否能包括反复值。假设不包括,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包括反复的值。对于多列惟一性索引,保证多个值的组合不反复。
PRIMARY KEY索引和UNIQUE索引很相似。其实,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表仅仅能包括一个PRIMARY KEY,由于一个表中不可能具有两个同名的索引。
以下的SQL语句对students表在sid上加入�PRIMARY KEY索引。
 
ALTER TABLE students ADD PRIMARY KEY (sid)
 
13.4.3  删除索引
可利用ALTER TABLE或DROP INDEX语句来删除索引。相似于CREATE INDEX语句,DROP INDEX能够在ALTER 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条语句仅仅在删除PRIMARY KEY索引时使用,由于一个表仅仅可能有一个PRIMARY KEY索引,因此不须要指定索引名。假设没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。
假设从表中删除了某列,则索引会受到影响。对于多列组合的索引,假设删除当中的某列,则该列也会从索引中删除。假设删除组成索引的全部列,则整个索引将被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119234.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月13日 下午10:00
下一篇 2021年11月13日 下午10:00


相关推荐

  • 回合制战斗设计

    回合制战斗设计转自 https blog csdn net zhanghefu article details 回合制战斗设计一前端基本设定回合制战斗设计一前端基本设定回合制战斗设计一前端基本设定前端需要考虑的问题 1 资源 解析战斗配置 加载各种资源文件 2 人物动作待命普通攻击技能性攻击待命 buff 效果

    2026年3月17日
    2
  • MVC框架简介

    MVC框架简介在 Web 应用程序设计中 MVC 模式已经被广泛使用 SpringMVC 以 DispatcherSe 为核心 负责协调和组织不同组件以完成请求处理并返回响应的工作 实现了 MVC 模式 1 mvc modeviewcont 是什么 m 指业务代码 v 指用户界面 c 是控制器使用 MVC 的目的是将 M 和 V 的实现代码分离 从而使同一个程序可以使用不同的表现形式是一种软件设计模式 用一种业务逻辑 数据 界面显示分离的方法组织代码 将业务逻辑聚集到一个部件里面 在改进和个性

    2026年3月17日
    2
  • linux rwx 权限「建议收藏」

    linux rwx 权限「建议收藏」@linuxrwx权限欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Markdown编辑器,可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的高亮样

    2022年5月2日
    60
  • mac navicat激活码-激活码分享

    (mac navicat激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月30日
    146
  • potplayer怎么设置清晰度_potplayer输出分辨率设置

    potplayer怎么设置清晰度_potplayer输出分辨率设置今天因为要看视频,所以用到了播放器,之前就下载过potplayer和kmplayer这两个播放器,一开始发现kmp的清晰度明显高于potplayer播放器,但随之发现kmplayer有几个缺点①在使用倍速播放的过程中有频繁的卡顿现象②设置较为繁琐③网上的教程不多,维护的人少(这两个软件作者相同,potplayer是作者跳槽之后开发的版本)。 所以还是准备使用potplayer,…

    2025年11月13日
    2
  • getParameterValues的用法「建议收藏」

    getParameterValues的用法「建议收藏」&lt;formname="checkform"method="post"action="getvalue.jsp"&gt;你希望学习哪些程式语言:&lt;br&gt;&lt;inputtype="checkbox"name="langtype"value="JSP"&gt;JSP &lt;inputtype=&q

    2022年7月22日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号