小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
  • <strong>常见mysql数据库命令</strong>

    常见mysql数据库命令

    update更新//替换phome_ecms_soft的onclick字段数值为857-3857之间,切只有id在1916到1980之间的数据执行update phome_ecms_soft SET onclick=FLOOR(857 + (RAND() * 3000)……
    187人已经看过了
  • 删除命令,清空数据库表的三种方式

    删除命令,清空数据库表的三种方式

    数据表的清空有三种方式: delete------ 是逐行删除速度极慢,不适合大量数据删除。 删除整张表数据:delete from table_name;删除部分表数据:Delete from table_name where 1=1……
    242人已经看过了
您的位置:首页 > 后端编程 > 数据库 > 数据库命令

sql的索引;它的作用、使用场景和创建/删除方法

分类: 数据库命令41个赞

sql的索引概述

SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍。

SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL系统的性能,加快数据的查询速度与减少系统的响应时间 

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构;通俗来讲索引就好比书本的目录,加快数据库的查询速度。


综上所述:sql的索引最重要的作用就是用来加快查询速度的


sql索引的作用

(1))提高查询效率

(2)消除数据分组、排序

(3)避免“回表”查询(索引覆盖)

(4)优化聚合查询

(5)用于多表JOIN关联查询

(6)利用唯一性约束,保证数据唯一性

(7)InnDB行锁实现


当然,索引也存在一些缺点,

sql索引的副作用


1.带索引的表在数据库中需要更多的存储空间;增加I/O成本;增加磁盘空间

2.增、删、改命令需要更长的处理时间,因为它们需要对索引进行更新


索引的使用场景

注意:此例子的中索引结构与数据库中的索引结构差距很大


user表有3个字段(id、name、age),存储8条记录,当我们查找age为20的记录时(在第六条),sql语句 select * from user where age=20;

1 在没有索引情况下需要依次遍历表里的记录,第6次时找到age=20的记录;

2 如果我们在age列添加索引,只需3次,就可以找到age=20的记录。


正如官方所说:索引是一个数据结构;

通过语句show index from tablename查看索引

可以根据Index_type看出该索引由BTREE数据结构实现;除了BTREE,还有HASH、FULLTEXT、RTREE;


创建索引的指导原则

适合创建索引的列

1、该列用于频繁搜索

2、该列用于对数据进行排序

3、在WHERE子句中出现的列,在join子句中出现的列。


请不要使用下面的列创建索引

1、列中仅包含几个不同的值。

2、表中仅包含几行。为小型表创建索引可能不太划算,因为MySQL在索引中搜索数据所花的时间比在表中逐行搜索所花的时间更长 


数据的存储方式

- 聚集索引:聚簇索引的顺序就是数据的物理存储顺序,索引与数据存放在同一个文件中。

- 非聚集索引:非聚簇索引的顺序与数据的物理存储顺序不同,索引与数据存放在不同的文件。

拓展阅读:sql索引之聚集索引和非聚集索引

索引的应用层次

-  单列:主键索引、唯一索引、普通索引

-  多列:复合索引



创建索引三种方法

1、主键索引:创建了主键就会自动的创建主键索引

2、唯一索引:创建唯一键就会创建唯一索引

-- 创建表的时候添加唯一索引
create table t5(
    id int primary key,
    name varchar(20),
    unique ix_name(name)	-- 添加唯一索引
);

-- 给表添加唯一索引
mysql> create table t5(
    -> name varchar(20),
    -> addr varchar(50)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> create unique index ix_name on t5(name);
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

-- 通过更改表的方式创建唯一索引
mysql> alter table t5 add unique ix_addr (addr);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

创建唯一键的语法

--创建唯一键语法一
create unique [index] 索引名 on 表名(字段名)
--创建唯一键方法二
alter table 表名 add uniqe [index] 索引名(字段名)

3、普通索引

-- 普通索引语法一
create index 索引名 on 表名(字段名)
-- 普通索引语法二
alter table 表名 add index 索引名(字段名)
-- 创建表的时候添加普通索引
mysql> create table t6(
    ->        id int primary key,
    ->        name varchar(20),
    ->        index ix_name(name)
    -> );
Query OK, 0 rows affected (0.02 sec)

-- 给表添加普通索引
mysql> create table t7(
    -> name varchar(20),
    -> addr varchar(50)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> create index ix_name on t7(name) ;
Query OK, 0 rows affected (0.08 sec)
Records: 0  Duplicates: 0  Warnings: 0

-- 通过更改表的方式创建索引
mysql> alter table t7 add index ix_addr(addr);
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

索引创建后,数据库根据查询语句自动选择索引


删除索引

语法:

drop index 索引名 on 表名
如:drop index ix_name on t7;


小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> sql的索引;它的作用、使用场景和创建/删除方法