27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]
E-mail:mzze@163.com
Q Q:32362389
W X:xiaomi168527
27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]
大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]
E-mail:97157726@qq.com
Q Q:97157726
SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍。
SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL系统的性能,加快数据的查询速度与减少系统的响应时间
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构;通俗来讲索引就好比书本的目录,加快数据库的查询速度。
综上所述:sql的索引最重要的作用就是用来加快查询速度的
(1))提高查询效率
(2)消除数据分组、排序
(3)避免“回表”查询(索引覆盖)
(4)优化聚合查询
(5)用于多表JOIN关联查询
(6)利用唯一性约束,保证数据唯一性
(7)InnDB行锁实现
当然,索引也存在一些缺点,
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的索引;它的作用、使用场景和创建/删除方法