mysql索引有几种

mysql索引有几种,第1张

Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。

那么,这几种索引有什么功能和性能上的不同呢?

FULLTEXT

即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一提的是,在数据量较大时候,现将数据放入一个没有全局索引的表中,然后再用CREATE INDEX创建FULLTEXT索引,要比先为一张表建立FULLTEXT然后再将数据写入的速度快很多。

全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。在没有全文索引之前,这样一个查询语句是要进行遍历数据表 *** 作的,可见,在数据量较大时是极其的耗时的,如果没有异步IO处理,进程将被挟持,很浪费时间,当然这里不对异步IO作进一步讲解,想了解的童鞋,自行谷哥。

全文索引的使用方法并不复杂:

创建ALTER TABLE table ADD INDEX `FULLINDEX` USING FULLTEXT(`cname1`[,cname2…])

使用SELECT * FROM table WHERE MATCH(cname1[,cname2…]) AGAINST ('word' MODE )

其中, MODE为搜寻方式(IN BOOLEAN MODE ,IN NATURAL LANGUAGE MODE ,IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION / WITH QUERY EXPANSION)。

关于这三种搜寻方式,愚安在这里也不多做交代,简单地说,就是,布尔模式,允许word里含一些特殊字符用于标记一些具体的要求,如+表示一定要有,-表示一定没有,*表示通用匹配符,是不是想起了正则,类似吧;自然语言模式,就是简单的单词匹配;含表达式的自然语言模式,就是先用自然语言模式处理,对返回的结果,再进行表达式匹配。

对搜索引擎稍微有点了解的同学,肯定知道分词这个概念,FULLTEXT索引也是按照分词原理建立索引的。西文中,大部分为字母文字,分词可以很方便的按照空格进行分割。但很明显,中文不能按照这种方式进行分词。那又怎么办呢?这个向大家介绍一个Mysql的中文分词插件Mysqlcft,有了它,就可以对中文进行分词,想了解的同学请移步Mysqlcft,当然还有其他的分词插件可以使用。

HASH

Hash这个词,可以说,自打我们开始码的那一天起,就开始不停地见到和使用到了。其实,hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value。正是由于这个特性,hash很适合做索引,为某一列或几列建立hash索引,就会利用这一列或几列的值通过一定的算法计算出一个hash值,对应一行或几行数据(这里在概念上和函数映射有区别,不要混淆)。在java语言中,每个类都有自己的hashcode()方法,没有显示定义的都继承自object类,该方法使得每一个对象都是唯一的,在进行对象间equal比较,和序列化传输中起到了很重要的作用。hash的生成方法有很多种,足可以保证hash码的唯一性,例如在MongoDB中,每一个document都有系统为其生成的唯一的objectID(包含时间戳,主机散列值,进程PID,和自增ID)也是一种hash的表现。额,我好像扯远了-_-!

由于hash索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。那为什么还需要其他的树形索引呢?

在这里愚安就不自己总结了。引用下园子里其他大神的文章:来自 14的路 的MySQL的btree索引和hash索引的区别

(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。

由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值,所以它只能用于等值的过滤,不能用于基于范围的过滤,因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系,并不能保证和Hash运算前完全一样。

(2)Hash 索引无法被用来避免数据的排序 *** 作。

由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值,而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样,所以数据库无法利用索引的数据来避免任何排序运算;

(3)Hash 索引不能利用部分索引键查询。

对于组合索引,Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值,而不是单独计算 Hash 值,所以通过组合索引的前面一个或几个索引键进行查询的时候,Hash 索引也无法被利用。

(4)Hash 索引在任何时候都不能避免表扫描。

前面已经知道,Hash 索引是将索引键通过 Hash 运算之后,将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中,由于不同索引键存在相同 Hash 值,所以即使取满足某个 Hash 键值的数据的记录条数,也无法从 Hash 索引中直接完成查询,还是要通过访问表中的实际数据进行相应的比较,并得到相应的结果。

(5)Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。

对于选择性比较低的索引键,如果创建 Hash 索引,那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦,会浪费多次表数据的访问,而造成整体性能低下。

愚安我稍作补充,讲一下HASH索引的过程,顺便解释下上面的第4,5条:

当我们为某一列或某几列建立hash索引时(目前就只有MEMORY引擎显式地支持这种索引),会在硬盘上生成类似如下的文件:

hash值 存储地址

1db54bc745a177#45b5

4bca452157d476#4556,77#45cc…

hash值即为通过特定算法由指定列数据计算出来,磁盘地址即为所在数据行存储在硬盘上的地址(也有可能是其他存储地址,其实MEMORY会将hash表导入内存)。

这样,当我们进行WHERE age = 18 时,会将18通过相同的算法计算出一个hash值==>在hash表中找到对应的储存地址==>根据存储地址取得数据。

所以,每次查询时都要遍历hash表,直到找到对应的hash值,如(4),数据量大了之后,hash表也会变得庞大起来,性能下降,遍历耗时增加,如(5)。

BTREE

BTREE索引就是一种将索引值按一定的算法,存入一个树形的数据结构中,相信学过数据结构的童鞋都对当初学习二叉树这种数据结构的经历记忆犹新,反正愚安我当时为了软考可是被这玩意儿好好地折腾了一番,不过那次考试好像没怎么考这个。如二叉树一样,每次查询都是从树的入口root开始,依次遍历node,获取leaf。

BTREE在MyISAM里的形式和Innodb稍有不同

在 Innodb里,有两种形态:一是primary key形态,其leaf node里存放的是数据,而且不仅存放了索引键的数据,还存放了其他字段的数据。二是secondary index,其leaf node和普通的BTREE差不多,只是还存放了指向主键的信息.

而在MyISAM里,主键和其他的并没有太大区别。不过和Innodb不太一样的地方是在MyISAM里,leaf node里存放的不是主键的信息,而是指向数据文件里的对应数据行的信息.

RTREE

RTREE在mysql很少使用,仅支持geometry数据类型,支持该类型的存储引擎只有MyISAM、BDb、InnoDb、NDb、Archive几种。

相对于BTREE,RTREE的优势在于范围查找.

各种索引的使用情况

(1)对于BTREE这种Mysql默认的索引类型,具有普遍的适用性

(2)由于FULLTEXT对中文支持不是很好,在没有插件的情况下,最好不要使用。其实,一些小的博客应用,只需要在数据采集时,为其建立关键字列表,通过关键字索引,也是一个不错的方法,至少愚安我是经常这么做的。

(3)对于一些搜索引擎级别的应用来说,FULLTEXT同样不是一个好的处理方法,Mysql的全文索引建立的文件还是比较大的,而且效率不是很高,即便是使用了中文分词插件,对中文分词支持也只是一般。真要碰到这种问题,Apache的Lucene或许是你的选择。

(4)正是因为hash表在处理较小数据量时具有无可比拟的素的优势,所以hash索引很适合做缓存(内存数据库)。如mysql数据库的内存版本Memsql,使用量很广泛的缓存工具Mencached,NoSql数据库redis等,都使用了hash索引这种形式。当然,不想学习这些东西的话Mysql的MEMORY引擎也是可以满足这种需求的。

(5)至于RTREE,愚安我至今还没有使用过,它具体怎么样,我就不知道了。有RTREE使用经历的同学,到时可以交流下!

中英文术语对照

absence 缺席

access 访问存取通路进入

achieve 实现完成

acquire 获得

adjacency list method 邻接表表示法

adjacency matrix method 邻接矩阵表示法

algorithm 算法

allocate 留下分配

analog 推论

append 添加

archive 档案归档

array 数组

assign 分配

assume 假设

assurance 确信信任

ATM(asynchronous transfer mode) 异步传输模式

b.. real programs kernels 实程序 核心程序

b.. toy benchmark synthetic benchmark 简单基准程序 复合基准程序

balance 平衡

bandwidth 带宽

batch 一批一组

benchmark 基准测试程序

best-fit algorithm 最佳适应算法

BFS(breadth first search) 广度优先搜索法

binary 二进制

binary relation 二元关系

binary tree 二叉树

bit series 比特序列

black-box white-box 黑盒 白盒

block miss 块失效

blocked 阻塞( 等待状态也称阻塞或

封锁状态)

boundary 界线分界

bridge 网桥

bubble sort 冒泡排序

calculation 计算

candidate key 候选键(辅键)

capability 能力才能

capacity 容量

cartesian product 笛卡尔积

CASE(com.. aided sof.. engineering) 计算机辅助软件工程

CCP(communication control processor) 通信控制处理机

cell 信元

characteristic 特征特性

circuit switching 线路交换

circular wait 循环等待

CISC(complex instruction set computer) 复杂指令集计算机

class 类

Client/Server 客户机/服务器

clock cycle clock rate 时钟周期 时钟频率

coaxial cable 同轴电缆

cohesion coupling 内聚 耦合

coincidental logical procedural functional 偶然内聚 逻辑内聚 过程

内聚 功能内聚

combination 联合配合

common 公用的 共同的

communication 通信

complement number 补码

component 成分

concept 概念观念

condition 情况状况

conform 符合

consist 组成存在

constrain 约束

contain 包含

correspond (corresponding) 相符合(相应的 一致的)

CPETT 计算机性能评价工具与技术

CPI 每条指令需要的周期数

CSMA/CD 带冲突检测的载波监听多路访问

cursor 游标

cyclic redundency check 循环冗余检校

database: integrity consistency restory 完整性 一致性 可恢复性

database: security efficiency 数据库设计的目标: 安全性 效率

deadlock: mutual exclusion 死锁条件: 互斥

deadlock: circular wait no preemption 死锁条件:循环等待 无优先权

decimal 十进位的

decision 决定判断

decomposition 双重的 混合的

decrease 减少

definition 定义

definition phase 定义阶段

demonstrate 证明

design phase 设计阶段

determine 限定

development phase 开发阶段

DFS(depth first search) 深度优先搜索法

diagram 图表

Difference Manchester 差分曼彻斯特

directed graph undirected graph 有向图 无向图

distinguish 辩认区别

distributed system 分布式系统

divide division 分开除 除法

divide union intersection difference 除 并 交 差

document 文件文档

DQDB(distributed queue dual bus) 分布队列双总线

draw 绘制

dual 二元的 双的

dynamic design process 动态定义过程

element 元素要素

elevator (scan) algorithm 电梯算法 又称扫描算法

encapsulation inheritance 封装( 压缩) 继承( 遗传)

encode 译成密码

entity 实体

entity integrity rule 实体完整性规则

equal 相等的

equation 方程式 等式

estimate 估计判断

Ethernet 以太网

evolution 发展演化

exceed 超过

exchange sort 交换排序

exclusive locks 排它锁(简记为X 锁)

execute 实现执行

exhibit 表现展示陈列

existence 存在发生

expertise 专门技术

external(internal) fragmentation 外( 内) 碎片

fault page fault 中断 过错 页中断

FDDI(fiber distributed data interface) 光纤分布式数据接口

FDM(frequency division multiplexing 频分多路复用

fiber optic cable 光缆

FIFO replacement policy 先进先出替换算法

figure 数字图形

final 最后的 最终的

first normal form 第一范式

floppy 活动盘片(软盘)

foreign key domain tuple 外来键 值域 元组

form 形状形式

formula 公式 表达式

foundation 基础根据基金

frame page frame 帧 结构 页结构

frequency 频率

FTP 文件传送服务

function 函数

functionally dependent 函数依赖

gateway 网间连接器

gather 聚集采集推测

general-purose registers 通用寄存器

generate 产生

grade 等级标准

graph (graphic) 图

Gropher 将用户的请求自动转换成

FTP

guarantee 保证确定

hash table hash function collision 哈希表哈希函数( 散列函数)碰撞

HDLC 面向比特型数据链路层协议

hit rate 命中率

host 主计算机

host language statement 主语言语句

hypertext 超级文本

illustrate 举例说明

independent 独立的

index 索引

indirect 间接的

influence 有影响的

initially 最初开头

insertion sort 插入排序

instruction format 指令格式

instruction set 指令集

interface 接口 分界面 连接体

internal 内部的 内在的

interrupt 中断

IPC 工业过程控制

ISAM VSAM 索引顺序存取方法虚拟存储存取方法

join natural join semijoin 连接 自然连接 半连接

judgment 判断

kernel executive supervisor user 核心执行管理用户

kernels 核心程序

key comparison 键(码)值比较

LAN(local area network) 局域网

load 负载载入

logical functional 逻辑内聚 功能内聚

longitudinal 水平的

loop 圈环状

maintain 维护保养供给

maintanence phase 维护( 保养) 阶段

MAN(metropclitan area network) 城域网

Manchester 曼彻斯特

map 地图 映射图

matrix 矩阵点阵

memory reference 存储器参量

message switching 报文交换

method 方法 技巧

MFLOP(million floating point operate p s 每秒百万次浮点运算

minimum 最小的

MIPS(millions of instructions per second 每秒百万条指令

module 单位基准

monitor (model benchmark physcal) method 监视( 模型基准物理)法

multilevel data flow chart 分层数据流图

multiple 复合的 多样的

multiple-term formula 多项式

multiplexing 多路复用技术

multiplication 乘法

mutual exclusion 互相 排斥

non-key attributes 非码属性

null 零空

Nyquist 奈奎斯特

object oriented 对象 趋向的 使适应的

object oriented analysis 面向对象的分析

object oriented databases 面向对象数据库

object oriented design 面向对象的设计

object oriented implementation 面向对象的实现

obtain 获得

occupy 占有 居住于

occurrence 事件

odd 奇数的

one-dimensional array 一维数组

OODB(object oriented data base) 面向对象数据库

OOM(object oriented method) 面向对象的方法

oom: information object message class 信息 对象 消息 类

oom: instance method message passing 实例 方法 消息传递

open system 开放系统

operand *** 作数

optimized 尽量充分利用

optional 任选的 非强制的

organize 组织

overflow 溢出

overlapping register windows 重叠寄存器窗口

packet switching 报文分组交换

page fault 页面失效

page replacement algorithm 页替换算法

paged segments 段页式管理

PCB(process control block) 进程控制块

peer entites 对等实体

perform 表演执行

period 时期周期

permit 许可准许

phase 阶段局面状态

physical data link network layer 物理层 数据链路层 网络层

pipeline 管道

platter track cluster 面 磁道 簇

predicate 谓语

preemption 有优先权的

prefix (Polish form) 前缀 (波兰表达式)

preorder inorder postorder 前序 中序 后序

presentation application layer 表示层 应用层

primary key attributes 主码属性

principle 原则方法

procedural coincidental 过程内聚 偶然内聚

process 过程加工处理

proficient 精通

program debugging 程序排错

projection selection join 投影选择连接

proposition 主张建议陈述

protocal 协议

prototype 原型样板

prototyping method (model) 原型化周期 (模型)

pseudo-code 伪码( 又称程序设计语言PDL)

punctuation 标点

purpose 目的意图

quality 质量品质

queue 队列

ready blocked running 就绪 阻塞( 等待) 运行

real page number 实页数

real programs 实程序

redirected 重定向

redundency 冗余

reference integrity rule 引用完整性规则

referred to as 把.....当作

regarde 关于

register(registry) 寄存器 登记 注册 挂号

regularly 定期的 常规的

relation 关系

relay 中继

reliability 可信赖的

repeater 中继器

replacement 替换

represent 代表象征

request indication response confirm 请求 指示 响应 确认

resource 资源

respon 回答响应

RISC(reduced instruction set computer) 精简指令集计算机

robustness 健壮性

router 路由器

scheme 计划图表

sector head cylinder 扇区 磁头 柱面

selection sort 选择排序

semaphores 信号

sequence 序列顺序

Shanon 香农

share locks 共享锁(简记为S 锁)

short path critical path 最短路径 关键路径

signal 信号

signal-to-noise ratio 信噪比 B/N

similar 相似的

SISD SIMD MISD MIMD * 指令流 * 数据流

SMDS 交换多兆位数据服务

software development phase 软件开发阶段

software engineering 软件工程

software portability 软件可移植性

software requirements specification 软件需求说明书

solve 解决

sort 种类方式分类排序

spanning tree 跨越树 (生成树)

specify 指定说明

speedup 加速比

SSTF(shortest-seek-time-first) 最短寻道时间优先( 磁盘调度算法)

stack strategy non-stack strategy 堆栈型 非堆栈型

starvation 饥饿匮乏

statement 陈述

storage 贮藏库

store procdures 存储过程

strategy 战略兵法计划

strict 严密的

styles 文体风格

subgroup 循环的

subset 子集 子设备

superclass subclass abstract class 超类 子类 抽象类

suppose 假定

symbolic 象征的 符号的

synthetic benchmark 复合基准程序

system testing 系统测试

Systolic 脉动阵列

table 表表格桌子

TDM(time division multiplexing) 时分多路复用

technology 工艺技术

terminal 终端

testing phase 测试阶段

theta select project theta join θ选择 投影 θ连接

time complexity 时间复杂度

timestamping 时标技术

Token Bus 令牌总线

Token Ring 令牌环

toy benchmark 简单基准程序

transaction 事务记录

transmite 传送

transport layer session layer 传输层 会话层

traversal method 遍历方法

triggers store procedures 触发器 存储过程

(ORACLE 系统)

underflow 下溢

unique 唯一的

unit system acceptance testing 单元测试 系统测试 确认测试

universe 宇宙 全世界

update 更新

value [数]值

variable 变量

vertical 垂直的

vertice edge 顶点( 结点) 边

via 经过

virtual memory system 虚拟存储系统

WAN(wide area network) 广域网

waterfall model 瀑布模型

white noise 白噪声

write-back(copy-back) 写回法

write-through(store-through) 写直达法

WWW(world wide web) 万维网

a priori probability 先验概率

a programming language apl 语言

a r wire 地址读出线

a register 累加寄存器

a type address constant a型地址常数

a. c. power supply 交羚源

a/d conversion 模拟 数字转换

a/d converter 模拟 数字转换器模数转换器

a/m switch 自动手控开关

abacus 算盘

abbreviated dialing 缩位拨号

abend 任务异常结束

abnormal end of task 任务异常结束

abnormal function 异常功能

abnormal termination 异常结束

abort routine 异常终止程序

abortion 中止

abridged division 简略除法

abs 绝对值

abs function 绝对函数

abscissa axis 横轴

absolute address 绝对地址

absolute addressing 绝对编址

absolute addressing mode 绝对编码方式

absolute assembler 绝对汇编程序

absolute code 绝对代码

absolute coding 绝对编码

absolute command 绝对坐标命令

absolute coordinates 绝对坐标

absolute data 绝对数据

absolute element 绝对元素

absolute error 绝对误差

absolute execution area 绝对执行区

absolute expression 绝对表达式

absolute function 绝对函数

absolute instructionm 绝对指令

absolute language 机骑言

absolute loader 二进装入程序

absolute loader routine 绝对地址装入程序

absolute measurements 绝对测量

absolute name 绝对名

absolute order 绝对坐标命令

absolute program 绝对程序

absolute program loader 绝对程序的装入程序

absolute programming 绝对程序设计

absolute sensitivity 绝对灵敏度

absolute symbol 绝对符号

absolute term 绝对项

absolute value 绝对值

absolute vector 绝对向量

absorber 吸收器吸收装置

absorbing barrier 吸收壁垒

absorption attenuation 吸收损耗

absorption loss 吸收损耗

abstract 摘录

abstract data type 抽象数据型

abstract machine 抽象计算机

abstract object 抽象客体

abstract semantic network 抽象语义网络

abstract symbol 抽象符号

abstraction 抽象

ac 交流

ac fault 动态故障

ac servomechanism 交僚服机构

ac servomotor 交僚服电动机

ac voltage 交羚压

acceleration 加速度

acceleration period 加速期

acceleration time 加速时间

accent 重音

accept 接受

accept statement 接收语句

acceptance gauge 检收量规

acceptance inspection 接收检验

acceptance sampling 验收取样

acceptance specification 验收说瞄

acceptance test 接收测试

accepting 接受

accepting station 接收站

acceptor 接收器受主

acceptor of data 数据接收器

access 存取

access address 存取地址

access arm 存取臂

access authorization 存取授权

access by key 键控存取

access code 存取代码

access control 存取控制

access control bits 存取控制位

access control key 存取控制键

access control mechanism 存取控制机构

access cycle 存取周期

access function 存取函数

access hole 取数孔

access interval 存取间隔


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6830487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存