mysql索引的常识

news/2024/7/7 10:33:15

1、索引类型
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的优势在于范围查找。

2、索引种类
普通索引:仅加速查询

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,进行搜索

ps.

索引合并,使用多个单列索引组合搜索
覆盖索引,select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

 

3、什么情况下不推荐使用索引?
1) 数据唯一性差(一个字段的取值只有几种时)的字段不要使用索引

比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。

2) 频繁更新的字段不要使用索引

比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。

3) 字段不在where语句出现时不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%输入符%’等条件,不建议使用索引

只有在where语句出现,mysql才会去使用索引

4) where 子句里对索引列使用不等于(<>),使用索引效果一般


http://www.niftyadmin.cn/n/2367930.html

相关文章

WCF----取消集成windows身份验证 IIS仍无权查看网页

在做一个最简单的WCF DEMO时&#xff0c;发布到IIS后右键点击svc文件浏览&#xff0c;出现“无权查看网页”的页面提示。 查看IIS &#xff0c;匿名访问已勾选&#xff0c;集成windows身份验证已取消勾选 最后发现是 Internet来宾账户没有启用。 计算机管理--》本地用户和组…

vim自定义快捷键

vim自定义快捷键# cat ~/.vimrc noremap <F5> :Tlist<cr> //定义F5为":Tlist"命令。<cr>的意思是不需要再敲回车确认map <F10> :NERDTreeToggle<CR> //windows下定义的快捷键 map <F9> :Tlist<CR //windows下定义的快捷键自定…

php 怎么开启报错提示

我们在开发的过程中&#xff0c;最好打开报错提示。有些错误&#xff0c;不打开报错提示的话&#xff0c;可能不会出现报错提示&#xff0c;这样做不到做技术的严谨性。 下面我们开启php的报错提示 1、php.ini来开启报错提示 2、 在文件中查找&#xff0c;display_errors O…

WCF---“无法从http://XXX/XXX.svc?wsdl获取元数据”错误的解决方法

将WCF服务搭建在远程机IIS6上&#xff0c;用本机IE访问User.svc网页正常&#xff0c;但调用服务出现超时&#xff0c; 重新添加服务引用时出现”元数据包含无法解析的引用“的错误。 经过网上搜索&#xff0c;发现问题在于IIS来宾账户没有权限访问C:\windows\Temp 文件夹的问题…

vim 自定义命令 自定义快捷键(转)

有五种映射存在 - 用于普通模式: 输入命令时。 - 用于可视模式: 可视区域高亮并输入命令时。 - 用于操作符等待模式: 操作符等待中 ("d"&#xff0c;"y"&#xff0c;"c" 等等之后)。 见下: |omap-info|。 - 用于插入模式: 也用于替换模式。…

WCF----双工模式服务端回调客户端方法时无响应,“发送到 http://***/User.svc 的请求操作在配置的超时内未收到回复”

用Winform客户端测试服务端回调方法&#xff0c;运行到回调方法时客户端无响应(在等待服务端回复消息)&#xff0c;直至出现连接超时错误信息。 发送到 http://192.168.0.5:8080/User.svc 的请求操作在配置的超时(00:00:59.9843750)内未收到回复。分配给此操作的时间可能已经是…

PHP+redis实现session共享

前言 小型web服务, session数据基本是保存在本地(更多是本地磁盘文件), 但是当部署多台服务, 且需要共享session, 确保每个服务都能共享到同一份session数据. redis 数据存储在内存中, 性能好, 配合持久化可确保数据完整. 设计方案 1. 通过php自身session配置实现 附加知识…

vim 拷贝方面发现的好文章

VIM中鼠标右键无法复制的解决方法&#xff1a;这个问题的原因应该是你的vim修改了配置文件&#xff0c;增加了下面这一句set mousea&#xff1b;vi的三种模式:命令模式,插入模式,可视模式.鼠标可以启动于各种模式中:The mouse can be enabled for different modes:n Norm…