`

mysql索引类型及特点

阅读更多
1. 普通索引
这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。

创建及修改方式
–直接创建索引
CREATE INDEX index_name ON table(column(length));
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
–删除索引
DROP INDEX index_name ON table


2. 唯一索引
索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

–创建唯一索
CREATE UNIQUE INDEX indexName ON table(column(length))
–修改表结构
ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))

3. 单列索引、多列索引
多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

4. 组合索引(最左前缀)
平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
–title,time
–title
为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索引,如下面的几个SQL所示:
(1)–使用到上面的索引

SELECT * FROM article WHREE title='测试' AND time=1234567890;
SELECT * FROM article WHREE utitle='测试';
(2)–不使用上面的索引
SELECT * FROM article WHREE time=1234567890;
上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。下面是一些总结以及收藏的MySQL索引的注意事项和优化方法。


5. 全文索引(FULLTEXT)

FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。////对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。
比如:content字段

–修改表结构添加全文索引
ALTER TABLE article ADD FULLTEXT index_content(content)
–直接创建索引
CREATE FULLTEXT INDEX index_content ON article(content)

SELECT * FROM table_name WHERE MATCH(index_name) AGAINST(‘搜索值’);
多词请用逗号或空格分开:
SELECT * FROM table_name WHERE MATCH(index_name) AGAINST(‘a,b’);

注:当个别词的出现频率超过50%时,被认作无效词,可以改为AGAINST (‘高频词’ IN BOOLEAN MODE)。

可以改为AGAINST (‘高频词’ IN BOOLEAN MODE)。

找到mysql.ini,在在 [mysqld] 位置添加:ft_min_word_len=1
重启mysql服务。
查看mysql环境变量:show variables;就可以看到设置的结果了

1.全文索引的字段类型必须为:char,varchar,text 。
2.对于中文全文索引,必须先把字段值做好中文分词,每个关键词之间用“ ,”“ ”分开,不然即使全文索引还是无效,谁让这些都是老外开发的呢(英文单词之间都是空格,妥妥的),


全文索引的几个注意事项

搜索必须在类型为fulltext的索引列上,match中指定的列必须在fulltext中指定过
仅能应用在表引擎为MyIsam类型的表中(MySQL 5.6以后也可以用在Innodb表引擎中了)
仅能再char、varchar、text类型的列上面创建全文索引
像普通索引一样,可以在定义表时指定,也可以在创建表后添加或者修改
对于一个大数量级记录插入,向没有索引的表中插入数据后创建索引比向有索引的数据表中插入的过程要快很多
搜索字符串必须是一个常量字符串,不能是表的列名
在搜索记录的选择性超过50%的时候,认为没有匹配(只在自然搜索中限制)


全文索引搜索语法
MATCH (列名1, 列名2,…) AGAINST (搜索字符串 [搜索修饰符])

其中在match里面指定的列名1、2等,就是在建立全文索引中指定的列名, 后面的搜索修饰符说明如下:
search_modifier:

{

IN NATURAL LANGUAGE MODE

| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION

| IN BOOLEAN MODE

| WITH QUERY EXPANSION

}


几种搜索类型的简介

上面的搜索修饰符,实际上说明了3种全文搜索类型

IN NATURAL LANGUAGE MODE

简介:默认的搜索形式(不加任何搜索修饰符或者修饰符为 IN NATURAL LANGUAGE MODE 的情况)

特点:

对于搜索字符串中的字符都解析为正常的字符,没有特殊意义
对屏蔽字符列表中的字符串进行过滤
当记录的选择性超过50%的时候,通常被认为是不匹配。
返回记录按照记录的相关性进行排序显示

模式下的应用:

还是应用在product表,其中在name字段我们建立了全文索引,因为我需要根据关键词在name列匹配出相关记录

Sql语句如下:

SELECT * FROM product WHERE match(name) against(‘auto’)

时间还不错,在将近87w的记录中命中了1w多条,耗时1.15秒,效果还是不错

注意:在默认的情况下已经是根据相关性从高到低返回记录了


IN BOOLEAN MODE

简介:布尔模式搜索(搜索修饰符为IN BOOLEAN MODE的情况)

特点:

会按照一定的规则解析搜索字符串中的特殊字符的含义,进行一些逻辑意义的规则。如:某个单词必须出现,或者不能出现等。
这种类型的搜索返回的记录是不按照相关性进行排序的
模式下的应用:

在布尔匹配模式中,我们可以添加一些特殊的符号,增加一些搜索过程的逻辑功能。如官方网站中提供的实例(搜索含有mysql字符串 且 不含Yousql的语句):

SELECT * FROM articles WHERE MATCH (title,body)

-> AGAINST (‘+MySQL -YourSQL’ IN BOOLEAN MODE);


WITH QUERY EXPANSION

简介:一种稍微复杂的搜索形式,实际上是进行了2次自然搜索,可以返回记录直接简介性关系的记录,修饰词IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION 或者WITH QUERY EXPANSION modifier

特点:这种类型的搜素,实际上提供了一种间接的搜索功能,比如:我搜索某个词,而且返回的第一行中却不包含搜索词中的任意字符串。可以根据第一次搜索结果的记录词进行第二次匹配,从而可能找到一些间接关系的匹配记录


重要的几个特性:

1. 哪些词会被忽略

搜索词太短 默认全文索引认为4个以上字符的单词是有效词,我们可以在配置中修改ft_min_word_len进行配置

屏蔽词表中的词 默认的全文索引将一些常用词屏蔽掉,因为这些词太常见了,没有任何语义作用,所以搜索过程中是忽略不计的。当然这个列表也是可以配置的。

2. 如何进行分词的

全文索引认为一个连续的有效字符(正则中\w匹配的字符集)是一个单词,也可以包含一个“’”, 但是连续的两个’会被认为是一个分隔符。其他的分隔符如:空格、逗号、句点等


实际上,上面的操作隐含了几个意思:

加号:相当于and

减号:相当于not

没有:相当于or

下面看下布尔类型搜索的几个重要特性:

1. 没有50%记录选择性的限制,即使搜索结果记录超过总数的50%也同样返回结果

2. 不会自动的按记录的相关性进行降序排序

3. 可以直接应用在没有创建fulltext的全文索引上,但是这样会查询的非常慢,所以说还是别用了。

4. 支持最小、最大单词长度

5. 应用屏蔽词列表


布尔搜索支持的操作符:

n 加号 +:指示修饰的单词必须出现在记录中

n 减号 -:指示修饰的单词必须不能出现在记录中

n 没有任何操作符:单词可有可无,但是包含该词的记录相关性高

n 双引号 “ : 将一个词组作为一个匹配。如:”one word” 匹配one word在一起的单词


下面是官方的一些实例:

至少包含一个词的记录

‘apple banana’

必须包含着两个词

‘+apple +juice’

必须包含apple,包含macintosh的记录相关性高,也可以不包含

‘+apple macintosh’

必须包含apple且不能喊有macintosh

‘+apple -macintosh’

查找apple开头单词的记录

‘apple*’

完整匹配some words单词

‘”some words”‘


索引的使用场景:
1. 何时使用聚集索引或非聚集索引?

动作描述 使用聚集索引 使用非聚集索引
列经常被分组排序 使用 使用
返回某范围内的数据 使用 不使用
一个或极少不同值 不使用 不使用
小数目的不同值 使用 不使用
大数目的不同值 不使用 使用
频繁更新的列 不使用 使用
外键列 使用 使用 使用
主键列 使用 使用 使用
频繁修改索引列 不使用 使用

2. 索引不会包含有NULL值的列(索引的命中)
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

3. 使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。


4. 索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。


5. like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

6. 不要在列上进行运算
例如:select * from users where YEAR(adddate)<2007,将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:select * from users where adddate<’2007-01-01′。关于这一点可以围观:一个单引号引发的MYSQL性能损失。


最后总结一下,MySQL只对一下操作符才使用索引:<,<=,=,>,>=,between,in,以及某些时候的like(不以通配符%或_开头的情形)。而理论上每张表里面最多可创建16个索引,不过除非是数据量真的很多,否则过多的使用索引也不是那么好玩的,比如我刚才针对text类型的字段创建索引的时候,系统差点就卡死了。



分享到:
评论

相关推荐

    球类物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    球类物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    交通信号灯检测系统源码分享.zip

    交通信号灯检测系统源码分享

    基站设备检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    基站设备检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    人脸活体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    人脸活体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    2025最新资源系统源码 类似XDGAME模板源码

    这款资源系统是一款基于PHP和MySQL开发的内容管理系统(CMS),广泛应用于资源分享、下载站点的搭建。该系统以简洁、高效、易用为特点,适合快速构建资源类网站。 核心功能 资源管理:支持多种资源类型(如软件、文档、视频等)的上传、分类、展示和下载。 用户系统:提供用户注册、登录、权限管理等功能,支持用户积分、等级制度。 SEO优化:内置SEO功能,支持自定义URL、关键词、描述等,提升搜索引擎排名。 模板管理:支持多套模板切换,用户可以根据需求自定义网站外观。 插件扩展:系统支持插件机制,用户可以通过安装插件扩展功能,如支付接口、社交分享等。 安全机制:内置防SQL注入、XSS攻击等安全机制,保障系统安全。 适用场景: 资源下载站 软件分享平台 文档分享站点 视频资源站

    数据集 + 红树林边缘河口溶解有机物的生物地球化学研究

    内容: 本研究探讨了巴西北部一个红树林边缘河口中的溶解有机物(DOM)动态,将DOM组成与其形成地点的氧化还原条件联系起来。通过结合分子分析与营养盐和微量元素数据,我们强调了难降解DOM的外流作为沿海碳储存的重要贡献者,并提出了一种新颖的分子指数(ISuP),用于区分复杂沿海生态系统中的DOM来源。该数据集包括由超高质量分辨率质谱(傅里叶变换离子回旋共振质谱仪,FT-ICR-MS)获得的溶解有机物的分子数据、从FT-ICR-MS数据计算出的分子指数(ISuP 和 ITerr),以及环境数据,包括溶解有机碳(DOC)、营养盐(硝酸盐和磷酸盐)和微量元素(铁、锰、钡)的数据。水样采集自巴西北部帕拉州布拉甘萨附近的一个红树林边缘河口。此研究对于理解沿海生态系统中碳循环及其在全球变化背景下所扮演的角色具有重要意义。"访问数据集" ()以获取更多详情。

    驾校管理系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC

    4S店车辆管理系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC

    火车车厢检测系统源码分享.zip

    火车车厢检测系统源码分享

    44页-智慧小区总体建设方案——智慧生活,科技社区.pdf

    智慧社区的建设背景与需求 智慧社区的建设源于“互联网+”时代的呼唤,是业主刚需促成的社区变革。随着市场化进程的加速,传统社区面临着运营业务少、建设成本高、维护难度大、业务不精、增值服务少、无数据沉淀、运营模式单一等问题。而新技术如大数据、云计算的崛起,为人与人、人与物、物与物之间的无界限连接提供了可能,推动了智慧社区的发展。业主对于智能家居、可视对讲、智能安防、社区消费、在线物业、社区互动等体验式社区的需求,也成为了购房的刚需。智慧社区的建设,旨在通过一站式服务提升楼盘品质及品牌溢价,简化物业系统,增强管理效率,降低建设及维护成本,为业主提供便捷、舒适的生活服务,并转型为服务提供商。 智慧社区的核心子系统与功能 智慧社区的建设依赖于多个核心子系统,包括视频监控、可视对讲、一卡通、背景音乐、信息发布等。视频监控子系统提供了全方位的安全保障,通过密码加密传输、数据库安全、云存储等技术,实现了录像的安全存储和智能分析,如全景监控、人员异常活动检测等功能。可视对讲子系统不仅实现了基本的对讲功能,还加入了人脸识别、远程开门、信息发布等智能化功能。一卡通子系统涵盖了门禁、考勤、消费、访客、梯控、巡更等多个应用场景,实现了统一数据库和身份认证体系下的便捷管理。此外,背景音乐子系统提供了定时广播、实时广播、事件联动等功能,而信息发布子系统则支持文字、图片、即时和任务播放,以及分组管理,为社区内的信息传播提供了便利。智慧社区还注重家居的智能化,通过情景模式预设、一键自动控制、系统传感器和逻辑功能自动运行等任务,以及兼容常规电器设备,为业主提供了舒适、健康、便利的居住环境。 智慧社区的运营方案与未来展望 智慧社区的运营方案包括开放的云平台、智能终端和丰富应用,旨在打造智慧社区行业生态圈。云平台的建设实现了海量信息存储、强大的计算能力,以及统一部署、统一服务、统一用户体验和降低成本的目标。交互客服平台的打造,通过公司门户网站、小区客服网站、业主个人中心等多渠道,建立了物业与业主之间的信任关系。智慧社区还提供了多方位的多媒体广告,搭建了用户与经营者之间的桥梁,增加了物业收入。同时,智慧社区还注重公私车位运营等增值业务,通过手机APP下单、确认租赁等方式,实现了车位的有效利用和物业收入的增加。未来,智慧社区将继续深化智能化建设,拓展更多应用场景,为业主提供更加便捷、舒适、智能的生活体验。

    棒球运动物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    棒球运动物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    学生综合测评系统 2024免费JAVA毕设

    2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC

    c#使用xaml做的动态学生点名系统

    去年写的学生点名系统,使用c#的xaml做的动画,使用账密登录,支持背景图修改,读取姓名,点名倒计时,背景音乐,手动停止,速度调整等。

    二维码与条形码检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    二维码与条形码检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    机器学习中基于决策树和朴素贝叶斯的鸢尾花分类研究与实现

    内容概要:文章主要介绍了利用决策树和朴素贝叶斯算法对鸢尾花进行分类的研究过程。文中首先概述了研究背景和意义,指出了鸢尾花数据集作为经典机器学习数据集的重要性,以及通过此数据集可以帮助理解和优化算法性能。研究内容涵盖了算法的基本原理、技术细节,如信息熵、信息增益及其比率,还包括对模型进行剪枝、性能评估等多项步骤。作者通过一系列实验证明,这两类方法能够在不同程度上有效地分辨三种不同品种的鸢尾花,并针对各自的优势与局限性给出了具体的分析与改进建议。 适用人群:适用于正在接触或学习机器学习入门级别的学生以及相关技术人员,尤其是那些希望加深对于分类算法尤其是决策树与朴素贝叶斯这两种经典算法了解的人群。 使用场景及目标:该研究旨在通过对鸢尾花数据集的实际操作,让学生或从业者掌握决策树和朴素贝叶斯在实际案例中的构建方法。同时培养他们对分类问题建模的兴趣和技能,提高他们在选择适当算法应对不同类型问题的能力。 其他说明:除了详细讲解两个核心主题外,文档还提及了一些关于数据处理(包括但不限于预处理和特征工程)、实验配置以及结果解读方面的基础知识。这对于初学者来说是非常有用的参考资料。值得注意的是,虽然文中强调决策树算法的优点,但也提到了诸如过拟合之类的潜在缺陷,并提出了相应的解决方案。总的来说,本文不仅有助于读者建立起对于两类主流分类算法的理解,也为未来的研究工作奠定了坚实的基础。

    模拟军事目标检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示].zip

    模拟军事目标检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

    海洋水体中溶解有机物分子组成的在线LC-MS分析

    内容: 该研究探讨了三种典型水样中的溶解有机物(DOM)的独特色谱行为,这些水样分别代表了沿海DOM、海洋表面DOM和海洋难降解DOM。在RV Polarstern的ANT XXII/2航次期间(站位PS67/006-130,纬度-67.5633,经度-55.3448),使用采水器从威德尔海表面(30米深度,海洋表面DOM)和深水(1356米深度,难降解DOM)采集水样,并在其他地方有所描述(El Naggar等人,2007;Koch等人,2008)。实验过程中,将160升海水通过0.2微米滤芯过滤,酸化至pH 2,并泵入60毫升固相萃取柱(PPL,5克)。DOM用40毫升甲醇洗脱后,在-18°C下保存。沿海DOM通常从南北海(纬度54.1447,经度7.8711)提取,并作为实验室内部标准使用。海水经过0.2微米PTFE(Whatman)过滤,酸化至pH 2后,也采用PPL萃取柱进行处理。 数据集包含4组数据,详细信息可访问提供的链接获取。

    5f3074e9b14c8a0069729d6464d15e35.PNG

    5f3074e9b14c8a0069729d6464d15e35.PNG

    花卉识别系统源码分享.zip

    花卉识别系统源码分享

    ssm的农家乐管理系统(有报告) Javaee项目

    重点:所有项目均附赠详尽的SQL文件,这一细节的处理,让我们的项目相比其他博主的作品,严谨性提升了不止一个量级!更重要的是,所有项目源码均经过我亲自的严格测试与验证,确保能够无障碍地正常运行。 1.项目适用场景:本项目特别适用于计算机领域的毕业设计课题、课程作业等场合。对于计算机科学与技术等相关专业的学生而言,这些项目无疑是一个绝佳的选择,既能满足学术要求,又能锻炼实际操作能力。 2.超值福利:所有定价为9.9元的项目,均包含完整的SQL文件。如需远程部署可随时联系我,我将竭诚为您提供满意的服务。在此,也想对一直以来支持我的朋友们表示由衷的感谢,你们的支持是我不断前行的动力! 3.求关注:如果觉得我的项目对你有帮助,请别忘了点个关注哦!你的支持对我意义重大,也是我持续分享优质资源的动力源泉。再次感谢大家的支持与厚爱! 4.资源详情:https://blog.csdn.net/2301_78888169/article/details/141651888 更多关于项目的详细信息与精彩内容,请访问我的CSDN博客!

Global site tag (gtag.js) - Google Analytics