MySQL索引类型Normal、Unique和Full Text的讲解
作者:CODETC 发布时间:2024-01-20 09:56:19
MySQL的索引类型有普通索引(normal),唯一索引(unique)和全文索引(full text),合理使用索引可大大提升数据库的查询效率,下面是三种类型的索引的介绍
normal:这是最基本的索引,它没有任何限制,MyIASM中默认的BTREE类型的索引,是我们大多数情况下用到的索引。
unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复。例如身份证号用作索引时,可设置为unique。
full text : 表示全文搜索的索引,仅可用于 MyISAM 表。 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。
mysql索引类型Normal,Unique,Full Text区别
Normal:
表示普通索引,大多数情况下都可以使用
Unique:
约束唯一标识数据库表中的每一条记录,即在单表中不能用每条记录是唯一的(例如身份证就是唯一的),Unique(要求列唯一)和Primary Key(primary key = unique + not null 列唯一)约束均为列或列集合中提供了唯一性的保证,Primary Key是拥有自动定义的Unique约束,但是每个表中可以有多个Unique约束,但是只能有一个Primary Key约束。
mysql中创建Unique约束
Full Text:
表示全文收索,在检索长文本的时候,效果最好,短文本建议使用Index,但是在检索的时候数据量比较大的时候,现将数据放入一个没有全局索引的表中,然后在用Create Index创建的Full Text索引,要比先为一张表建立Full Text然后在写入数据要快的很多
总结,索引的类别由建立索引的字段内容特性来决定,通常normal最常见。
在实际操作过程中,应该选取表中哪些字段作为索引?
为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引,有7大原则:
1.选择唯一性索引
唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。例如,学生表中学号是具有唯一性的字段。为该字段建立唯一性索引可以很快的确定某个学生的信息。如果使用姓名的话,可能存在同名现象,从而降低查询速度。
2.为经常需要排序、分组和联合操作的字段建立索引
经常需要ORDER BY、GROUP BY、DISTINCT和UNION等操作的字段,排序操作会浪费很多时间。如果为其建立索引,可以有效地避免排序操作。
3.为常作为查询条件的字段建立索引
如果某个字段经常用来做查询条件,那么该字段的查询速度会影响整个表的查询速度。因此,为这样的字段建立索引,可以提高整个表的查询速度。
4.限制索引的数目
索引的数目不是越多越好。每个索引都需要占用磁盘空间,索引越多,需要的磁盘空间就越大。修改表时,对索引的重构和更新很麻烦。越多的索引,会使更新表变得很浪费时间。
5.尽量使用数据量少的索引
如果索引的值很长,那么查询的速度会受到影响。例如,对一个CHAR(100)类型的字段进行全文检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。
6.尽量使用前缀来索引
如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
7.删除不再使用或者很少使用的索引
表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
注意:选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的准则。读者要在以后的学习和工作中进行不断的实践。根据应用的实际情况进行分析和判断,选择最合适的索引方式。
举个例子来说,比如你在为某商场做一个会员卡的系统。这个系统有一个会员表(大致字段如下):
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个会员编号,作为主键,使用 PRIMARY
会员姓名如果要建索引的话,那么就是普通的 INDEX
会员身份证号码如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
来源:http://www.codetc.com/article-309-1.html


猜你喜欢
- 让我们先从怎样删除数组中的重复项这个简单问题开始。复杂 - 使用 forEach 删除重复项首先,我们新创建一个空数组,用 forEach(
- 由于项目收尾,最近忙着做一些方法的优化,整理了一些分享给大家。 当页面内有许多控件,我们在需要清空其值的时候,一个个清空未免太麻烦。于是写了
- 之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片。最近做项目,打算换个方法上传图片。Android发展到现在,Okhttp
- 基于python的web项目,常见的部署方法有: fcgi:用spawn-fcg
- zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。具体意思不好用文字来表述,直接看示例:1.示例1:x = [1
- 一般来说,函数(function)是组织好的、可重复使用的、具有一定功能的代码段。函数能提高应用的模块性和代码的重复利用率,在Python中
- What do the ->, => and :: symbols mean?The -> is the "in
- 目录uni-app 介绍html部分js部分创建实例开始录音结束录音播放录音暂停播放提交录音到后端重新录制onLoad部分计时器数据部分un
- 在windows10系统下安装两个不同版本的的python解释器,在通常情况下编译执行文件都是没问题的,但是加载或下载包的时候pip的使用就
- 下面我给出几种常用的方法: 1 .对象冒充 原理: 构造函数使用this关键字给所有属性和方法赋值, 因为构造函数只是一个函数,所以可以使C
- go简单代码反汇编用简单的代码用以分析go的调用约定及多返回值的返回方式。package mainfunc vals(c, d int) (
- 主库执行CREATE DATABASE test CHARACTER SET utf8 COLLATE utf8_general_ci;us
- 近期要在生产环境上使用react,所以,自己学习了一下,写了一个简单的留言板小程序。完整的代码可以到这里下载:message-boardUs
- 在Python2.x中表示八进制的方式有两种:以'0'开头和以'0o'(字母o)开头: Pyth
- 由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。>>> def now():... &n
- 目录一、ZIP 格式简介二、浏览器解压方案2.1 定义工具类2.2 在线解压 ZIP 文件三、服务器解压方案3.1 根据文件名解压指定 ZI
- 本文实例为大家分享了Django实现上传图片的具体代码,供大家参考,具体内容如下1.设置存放上传的图片的文件夹settings.pyMEDI
- 来做一个快速测验-以下代码输出什么?vals := make([]int, 5)for i := 0; i < 5; i++ { va
- 一、项目说明在日常生活中,我们经常会存取一些朋友们的丑照,在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片。效
- Encode将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error:func Marshal(v i