索引的类型及分类,以及唯一索引、聚集索引和非聚集索引的本质区别
一、索引方法
Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
1. FULLTEXT
即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。
全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。
2. HASH
由于HASH的唯一(几乎100%的唯一)及类似键值对的形式,很适合作为索引。
HASH索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在“=”和“in”条件下高效,对于范围查询、排序及组合索引仍然效率不高。
3. BTREE
BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口root开始,依次遍历node,获取leaf。这是MySQL里默认和最常用的索引类型。
4. RTREE
RTREE在MySQL很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。
相对于BTREE,RTREE的优势在于范围查找。
ps. 此段详细内容见此片博文:Mysql几种索引类型的区别及适用情况
二、索引类型
普通索引:仅加速查询
唯一索引:加速查询 + 列值唯一(可以有null)
主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
全文索引:对文本的内容进行分词,进行搜索
ps.索引合并,使用多个单列索引组合搜索
覆盖索引,select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖
三、使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
1.索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2.使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3.索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4.like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
5.不要在列上进行运算
复制代码 代码如下:
select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:
复制代码 代码如下:
select * from users where adddate<‘2007-01-01';
6.不使用NOT IN和<>操作
唯一索引、聚集索引和聚集索引本质区别
1.一个表只能有一个主索引-PRIMARY,且只有是数据库表才有主索引,后缀为.CDX,索引关键字是不可以重复的.哪怕是空记录也只可以有一条.
2.候选索引可以有很多个,索引关键字同样不可以重复,同样只存在于数据库表.
3.唯一索引,可以存在于自由表,但索引关键字不可以重复.
4.普通索引简单的理解就是只起排序作用.索引关键字是可以重复的.可存在于自由表.
主键与唯一索引的区别
主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值 + 唯一索引了。 主键可以被其他表引用为外键,而唯一索引不能。 一个表最多只能创建一个主键,但可以创建多个唯一索引。 主键更适合那些不容易更改的唯一标识,如自动递增列、身份证号等。 在 RBO 模式下,主键的执行计划优先级要高于唯一索引。 两者可以提高查询的速度。
CREATE UNIQUE INDEX test_UniqueKey ON test (UniqueKey);
聚集索引:
聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个顺序存储。
在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同。聚集索引通常可加快UPDATE和DELETE操作的速度,因为这两个操作需要读取 大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。
非聚集索引:
因为一个表中只能有一个聚集索引,如果需要在表中建立多个索引,则可以创建为非聚集索引。表中的数据并不按照非聚集索引列的顺序存储,但非聚集索引的索引行中保存了非聚集键值和行定位器,可以快捷地根据非聚集键的值来定位记录的存储位置。
无论是聚集索引,还是非聚集索引,都可以是唯一索引。在SQL Server中,当唯一性是.数据本身的特点时,可创建唯一索引,但索引列的组合不同于表的主键。例如,如果要频繁查询表Employees(该表主键为 列Emp_id)的列Emp_name,而且要保证姓名是唯一的,则在列Emp_name上创建唯一索引。如果用户为多个员工输入了相同的姓名,则数据库 显示错误,并且不能保存该表。
参考
SQL Server数据库--索引 - cplvfx - 博客园什么是索引 描述: 汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等 我们可以根据拼音或偏旁部首,快速查找某个字词 SQL Server中的数据也是按页存放 索引: 是SQL Shttps://www.cnblogs.com/cplvfx/articles/10482236.html索引的类型及分类 - CodingPanda - 博客园一、索引方法Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 1. FULLTEXT即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLhttps://www.cnblogs.com/LiLiliang/p/9960895.html
唯一索引、聚集索引和聚集索引 - fthjane - 博客园主键是一种约束,唯一索引是一种索引,两者在本质上是不同的。 主键创建后一定包含一个唯一性索引,唯一性索引并不一定就是主键。 唯一性索引列允许空值,而主键列不允许为空值。 主键列在创建时,已经默认为空值https://www.cnblogs.com/fthjane/p/4776737.html
索引的类型及分类,以及唯一索引、聚集索引和非聚集索引的本质区别相关推荐
- 茶的分类计算机基础知识,【收藏】六大茶类的本质区别,看这篇就够了!(附茶叶分类图)...
原标题:[收藏]六大茶类的本质区别,看这篇就够了!(附茶叶分类图) 其实六大茶类的划分标准和本质区别在于,制作工艺和茶叶中茶多酚的氧化程度.接下来就按茶叶发酵程度由低到高排序,简要介绍各类茶之间的区别 ...
- SQLServer存储引擎——05.索引的结构和分类
5. SQLServer存储引擎--索引的结构和分类 关系型数据库中以二维表来表达关系模型,表中的数据以页的形式存储在磁盘上,在SQL SERVER中,数据页是磁盘上8k的连续空间,那么,一个表的所有 ...
- 【译】SQL Server索引进阶第八篇:唯一索引
索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其 ...
- 【翻译】SQL Server索引进阶:第八级,唯一索引
原文地址: Stairway to SQL Server Indexes: Level 8,Unique Indexes 本文是SQL Server索引进阶系列(Stairway to SQL Ser ...
- 聚集索引和非聚集索引的区别底层_数据库-索引相关
一.什么是索引 在数据库中,索引的含义与日常意义上的"索引"一词并无多大区别(想想小时候查字典),它是用于提高数据库表数据访问速度的数据库对象. 总而言之,索引是一个排序的列表,在 ...
- 聚集索引和非聚集索引[转]
作者:min10 来源:博客园 时间:2008-12-22 阅读:562 次 原文链接 [收藏] 聚集索引的区别 聚集索引:物理存储按照索引排序 非聚集索引:物理存储不按照索引排序 优势与 ...
- 聚集索引和非聚集索引的区别有哪些
SQL SERVER提供了两种索引:聚集索引和非聚集索引.其中聚集索引表示表中存储的数据按照索引的顺序存储,检索效率比非聚集索引高,但对数据更新影响较 大.非聚集索引表示数据存储在一个地方,索引存储在 ...
- SQL Server索引概要(3)-聚集索引和非聚集索引的区别
索引用于加速 SQL Server 中的查询过程,从而提高性能.它们类似于教科书索引.在教科书中,如果您需要转到特定章节,请转到索引,找到该章节的页码并直接转到该页面.如果没有索引,查找所需章节的过程 ...
- SQL Server聚集索引和非聚集索引
参考: http://www.cnblogs.com/kissdodog/archive/2013/06/12/3132380.html http://www.cr173.com/html/17298 ...
- 【MySQL】MySQL的存储引擎和索引详解(聚集索引和非聚集索引)
目录 一.MySQL存储引擎 1.1 Innodb引擎 1.2 MyISAM引擎 1.3 InNoDB与MyISAM异同 1.4 两种引擎的选择 二.索引(Index) 2.1 InnoDB存储引擎 ...
最新文章
- HPAIC人类蛋白质图谱分类挑战赛金牌经验分享
- 学习使用 Manifest
- LeetCode 1548. The Most Similar Path in a Graph(动态规划)
- kibana java script_Elasticsearch:创建 Runtime field 并在 Kibana 中使用它 - 7.11 发布 - TGCode...
- jenkins远程构建job_jenkins分布式构建job
- android windows的一些item属性
- 聊聊工作与生活的平衡
- linux操作实例,linux下的一些文档操作实例 | Soo Smart!
- jquery ajax提交form表单,jquery+ajax提交form表单方法总结
- nginx的反向代理proxy_pass指令
- 技校计算机应用基础,技校《计算机应用基础》教法探讨
- Apache IoTDB 鼠年总结
- [NLP] 实例讲解 N-gram语言模型 中 Good-Turning 平滑技术
- 电脑有网却打不开网页(能ping通)
- 永中文档在线转换预览双活实现方案
- 微信小程序获取用户信息和手机号遇到解密失败-41003问题
- UltralISO镜像刻录软件的简单使用
- CAD是什么?CAD制图软件功能大汇总
- 【测试】自动化UI测试小工具
- 国产软件Bigemap与国产在线地图源<星图地球数据云>推动国内新GIS应用