mysql普通索引示例_索引-mysql索引创建、查看、删除及使用示例

mysql索引创建、查看、删除及使用示例

1.创建索引:

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

ALTER TABLE table_name ADD INDEXindex_name (column_list)ALTER TABLE table_name ADD UNIQUE(column_list)ALTER TABLE table_name ADD PRIMARY KEY (column_list)

CREATE INDEX可对表增加普通索引或UNIQUE索引。

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

2.删除索引:

DROP INDEX index_name ONtalbe_nameALTER TABLE table_name DROP INDEXindex_nameALTER TABLE table_name DROP PRIMARY KEY

3.查看索引:

mysql> show index fromtblname;

mysql> show keys from tblname;

===========================以下为索引的使用场景(sqlserver)=================================

1.创建表并插入数据

在Sql Server2008中创建测试数据库Test,接着创建数据库表并插入数据,sql代码如下:

48304ba5e6f9fe08f3fa1abda7d326ab.png

USETest

IF EXISTS (SELECT * FROMINFORMATION_SCHEMA.TABLES

WHERE TABLE_NAME = 'emp_pay')

DROP TABLEemp_pay

GO

USETest

IF EXISTS (SELECT name FROMsys.indexes

WHERE name = 'employeeID_ind')

DROP INDEXemp_pay.employeeID_ind

GO

USETest

GO

CREATE TABLEemp_pay

(

employeeID int NOT NULL,

base_pay money NOT NULL,

commission decimal(2, 2) NOT NULL)

INSERTemp_pay

VALUES (1, 500, .10)

INSERTemp_pay

VALUES (2, 1000, .05)

INSERTemp_pay

VALUES (6, 800, .07)

INSERTemp_pay

VALUES (5, 1500, .03)

INSERTemp_pay

VALUES (9, 750, .06)

48304ba5e6f9fe08f3fa1abda7d326ab.png

执行完上述sql代码以后我们会发现在Test数据库中多出了一张emp_pay表,数据库表的内容如下图所示:

f8d5c26b9f28e3d10a9e07eb5d7e27ab.png

2.无索引查找

从上图我们可以看出数据库中存储的数据排列顺序与我们插入的先后顺序一致。接下来我们查询employeeID=5的字段,执行如下sql代码:

USETest

SELECT * FROM emp_pay where employeeID=5

在SQL SERVER MANAGEMENT STUDIO中我们点击“显示估计的查询计划”,会出现如下图所示的查询计划图:

e2edb4eb19ba55068bb755b4e6ad0f86.png

其中表扫描的内容为:

4ec0e9d2594c1b1bd89bfe974972bc24.png

3.创建索引

接下来我们为上述表添加聚集唯一索引,代码如下:

SET NOCOUNT OFF

CREATE UNIQUE CLUSTERED INDEXemployeeID_ind

ONemp_pay (employeeID)

GO

在执行完上述创建索引的代码以后,我们再次查询emp_pay的数据内容,如下图所示:

889da5504375e0aaab485174ba252402.png

从上图我们可以发现数据内容已经按照employeeID进行了排序。

我们继续执行前面关于employeeID=5的查询,点击“显示估计的执行计划”,出现如下图所示内容:

e3198f7e2534051cc9f7732229e5f723.png

聚集索引查找的内容为:

462a1618d0e9e9042ffa6513db472b00.png

总结:

当我们为数据库表中的某一个字段创建索引,并且在查询语句中where子句中用到这样一个字段,那么查询效率会有所提高,我们上述实验因为数据量的关系查询效率提高不明显。

补充

我们上面添加的索引是唯一聚集索引,因此当插入的数据在employeeID字段出现重复时会报错。假如我们在创建索引之前数据字段出现重复,那么就不能创建唯一索引。

创建索引以后的排序(PS:2012-5-28)

执行如下sql语句

update emp_pay set employeeID=7 where employeeID=1;

然后再次执行全表查询,我们发现查询结果如下所示:

b1d60a0d1461bcd34d8c9244e97688b3.png

只要我们更新了employeeID,那么最后的更新结果都会按照employeeID的值进行升序排序。这是因为我们在employeeID上创建了索引的缘故。

删除索引(PS:2012-6-4)

我们可以通过sql server management studio这个工具删除索引,也可以通过sql语句进行索引的删除,假设我们要求删除在前面创建的索引employeeID_ind,那么sql语句如下代码所示:

DROP INDEX employeeID_ind ON emp_pay;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值