mysql索引介绍

mysql索引介绍

什么是索引?

索引是一种高效获取数据的数据结构。

索引的类型

FULLTEXT,(HASH,BTREE[mysql主要使用的两种]),RTREE。

1、FULLTEXT

即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。

全文索引并不是和MyISAM一起诞生的,它的出现是为了解决WHERE name LIKE “%word%”这类针对文本的模糊查询效率较低的问题。

(免费学习视频教程推荐:mysql视频教程)

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的优势在于范围查找。

索引种类

普通索引:仅加速查询

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

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

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

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

索引使用

1、创建索引

1 --创建普通索引CREATE INDEX index_name ON table_name(col_name);2 --创建唯一索引CREATE UNIQUE INDEX index_name ON table_name(col_name);3 --创建普通组合索引CREATE INDEX index_name ON table_name(col_name_1,col_name_2);4 --创建唯一组合索引CREATE UNIQUE INDEX index_name ON table_name(col_name_1,col_name_2);

2、通过修改表结构创建索引

ALTER TABLE table_name ADD INDEX index_name(col_name);

3、创建表时直接指定索引

jQuery的页面功能分步指引介绍代码 jQuery的页面功能分步指引介绍代码

jQuery的页面功能分步指引介绍代码

jQuery的页面功能分步指引介绍代码 47 查看详情 jQuery的页面功能分步指引介绍代码

CREATE TABLE table_name (    ID INT NOT NULL,col_name VARCHAR (16) NOT NULL,INDEX index_name (col_name));

4、删除索引

--直接删除索引DROP INDEX index_name ON table_name;--修改表结构删除索引ALTER TABLE table_name DROP INDEX index_name;

5、其它命令

- 查看表结构    desc table_name; - 查看生成表的SQL    show create table table_name; - 查看索引    show index from  table_name; - 查看执行时间    set profiling = 1;    SQL...    show profiles;

索引失效的原因

1、全值匹配,相当于索引没有使用。

2、未满足最佳前缀法则也可能造成索引失效。

3、在索引上做关于(计算、函数、(自动or手动)类型转换),会造成索引失效而导致全表扫描。

4、mysql在使用不等于(,!=)的时候无法使用索引而导致全表扫描。

5、is null ,is not null 也无法使用索引。

6、like 以通配符开关(’%abc’)会导致索引失效而全表扫描。

7、字符串不加单引号索引会失效。

8、少用or,用or连接时会导致索引失效。

9、使用select * 查询,尽量使用覆盖索引。

mysql索引规约

1、【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引(说明:不要以为唯一索引影响了 insert 速度,这个速度损耗可以忽略,

但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。)

2、【强制】超过三个表禁止 join。需要 join 的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

(说明:即使双表 join 也要注意表索引、SQL 性能。)

3、【强制】在 varchar 字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。

(说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为 20 的索引,区分度会高达 90%以上,

可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度来确定。)

4、【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

(说明:索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。)

相关文章教程推荐:mysql教程

以上就是mysql索引介绍的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/781832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月26日 10:01:12
下一篇 2025年11月26日 10:06:42

相关推荐

  • Java中Servlet的生命周期 图解Servlet从初始化到销毁的过程

    servlet的生命周期主要包括加载、初始化、处理请求和服务终止四个阶段。1.加载阶段:servlet容器在首次接收请求或启动时加载servlet类;2.初始化阶段:容器创建实例并调用init()方法,该方法仅执行一次,用于读取配置、建立数据库连接等初始化操作;3.处理请求阶段:每次请求到达时,容器…

    2025年12月5日 java
    000
  • MySql如何查出符合条件的最新数据行

    结合示例: 这是一张记录人员来访的记录表。 数据表里的数据准确记录了每个人来访时带的帽子颜色、时间、人员编码(每个人唯一)。 数据样例: 需要做到的是 : 拿出符合条件的最新的来访记录。 你会最怎么做? 先实现一点的, 取出 A101 这个人员编码的 最新来访记录 。 首先先展示错误的sql示例: …

    2025年12月5日 数据库
    000
  • PHP与SQLite数据库交互时如何优化查询的处理方法?

    合理使用索引能显著提升查询速度,但避免频繁更新字段加索引;2. 使用预处理语句减少重复解析开销,提高安全性与效率;3. 控制查询范围避免全表扫描,指定字段并用limit和offset分页;4. 合理使用事务合并写操作,提高批量数据处理效率。在sqlite中优化php查询需从索引设计、预处理、查询控制…

    2025年12月5日 后端开发
    000
  • 如何在Laravel中配置数据库索引

    在laravel中配置数据库索引的核心方法是使用迁移系统定义索引以提升查询性能。1. 在创建表时,可在schema::create回调中通过index()、unique()等方法直接添加索引;2. 对已有表,可创建新迁移文件并在schema::table中添加索引;3. laravel支持多种索引类…

    2025年12月5日
    100
  • mysql中聚集索引、辅助索引、覆盖索引、联合索引怎么用

    聚集索引(Clustered Index) 聚集索引就是按照每张表的主键构造一棵b+树,同时叶子节点中存放的即为整张表的行记录数据。 举个例子,直观感受下聚集索引。 创建表t,并以人为的方式让每个页只能存放两个行记录(不清楚怎么人为控制每页只存放两个行记录): 最后《MySQL技术内幕》的作者通过分…

    2025年12月5日 数据库
    000
  • MySQL如何实现主从复制 MySQL主从复制的配置与常见问题解决

    mysql主从复制的原理是基于二进制日志(binlog),主服务器将数据变更记录到binlog中,从服务器通过i/o线程请求并接收binlog事件,写入中继日志(relay log),再由sql线程读取中继日志并重放,从而实现数据同步;1. 主服务器开启binlog并设置唯一server-id;2.…

    2025年12月5日
    000
  • Composer提示Package not found如何解决_常见包找不到错误排查

    Composer提示“Package not found”通常因包名错误、版本不匹配、缓存问题、网络阻塞或仓库配置不当。首先检查composer.json中包名与版本是否正确,确认无误后清除缓存(composer clear-cache),再尝试重新安装;若仍失败,可删除vendor目录和compo…

    2025年12月5日
    000
  • mysql卸载安装的方法是什么

    一、Windows系统下MySQL的卸载 打开“计算机”——“控制面板”——“程序”——“程序和功能”选项。 找到MySQL程序,单击它,然后选择“卸载”选项。 MySQL的配置文件和数据文件可以在弹出的卸载窗口中选择删除。如果你希望重新安装MySQL,可以保留这些文件。 卸载完成后,请在文件浏览器…

    数据库 2025年12月5日
    000
  • 如何在Laravel中实现数据补全

    数据补全功能可在用户输入不完整信息时智能猜测并提供完整选项,laravel中可通过前后端协作实现:1.前端使用typeahead.js、select2或awesomplete监听输入框并发送ajax请求;2.后端创建路由和控制器接收输入值,用eloquent orm结合like或全文搜索技术查询数据…

    2025年12月5日
    000
  • mysql查询慢日志怎么开启

    一、什么是MySQL查询慢日志 MySQL查询慢日志是MySQL自带的性能分析工具,用于记录超过指定时间阈值的查询请求。慢查询日志中记录了每个查询的不同性能指标,比如所需时间、执行次数以及执行计划等。开发人员可以通过这些指标识别出需要优化的查询,以提高效率并采取相应措施。 默认情况下,MySQL的查…

    数据库 2025年12月5日
    000
  • 解决PHPMyAdmin操作数据库时的“连接过多”问题

    解决phpmyadmin“连接过多”问题需从配置调整、查询优化和用户行为管理三方面入手。1. 检查当前连接数并调整max_connections参数,根据服务器资源适当增加最大连接数;2. 通过慢查询日志定位耗时sql,使用explain分析执行计划并优化,如添加索引或重写语句;3. 合理设置wai…

    2025年12月5日 后端开发
    000
  • java中的enum代表什么 枚举enum的4个实用技巧提升代码质量

    java中的enum本质上是限制实例化的特殊类,用于提升代码可读性、类型安全性和可维护性。1. 使用values()方法可遍历所有枚举值,避免手动维护列表带来的错误;2. valueof()方法实现字符串到枚举常量的转换,但需处理非法输入引发的异常;3. 枚举可添加字段和方法,封装更多逻辑,如定义抽…

    2025年12月5日 java
    000
  • PHPMyAdmin执行SQL语句时结果集显示不全的处理办法

    要解决phpmyadmin执行sql语句结果集显示不全的问题,需调整其配置文件中的两个核心参数:1. 修改$cfg[‘maxrows’]以增加最大显示行数;2. 修改$cfg[‘limitchars’]以增加单元格内容显示长度。此外,还可通过导出数据、…

    2025年12月5日 后端开发
    000
  • MySQL怎么实现分库分表备份

    题目:MySQL分库分表备份 脚本详细内容 [root@db02 scripts]# cat /server/scripts/Store_backup.sh #!/bin/sh MYUSER=root MYPASS=xuliangwei SOCKET=/data/3306/mysql.sock MY…

    数据库 2025年12月5日
    000
  • 如何在Laravel中配置数据库事务

    laravel数据库事务的最佳实践包括:1.优先使用db::transaction()闭包简化事务管理,异常自动回滚、成功自动提交;2.保持事务短小精悍,仅包含必须原子性执行的数据库操作,避免耗时外部调用;3.明确事务边界,适用于“全有或全无”的业务场景如订单创建流程;4.做好异常处理,捕获并记录异…

    2025年12月5日
    000
  • MySQL怎样优化SQL语句 MySQL高效SQL语句编写的技巧与规范

    mysql优化sql语句的核心是提升查询速度并减少资源消耗,需通过索引优化、查询结构改进和配置调优等多方面协同实现。1. 索引优化:应根据查询类型选择合适的索引(如b-tree用于范围查询,hash用于等值查询),在where、order by、group by涉及的列上创建索引,优先为高选择性列建…

    2025年12月5日
    000
  • 如何使用docker开启mysql的binlog日志解决数据卷问题

    前言 在开发中,需要通过监听mysql的binlog日志文件做到对数据表的监控,由于mysql是部署在docker容器中,还需要解决数据卷的问题 1、通过数据卷的方式开启一个mysql镜像 docker run -p 3307:3306 –name myMysql -v /usr/docker/m…

    2025年12月5日 数据库
    000
  • win11怎么在任务栏显示秒_Win11任务栏时钟显示秒数设置方法

    1、可通过设置、注册表、命令行或第三方工具在Windows 11任务栏时钟显示秒数;2、设置中开启最安全,注册表修改适用于所有版本,命令行更高效,第三方工具提供个性化选项。 如果您希望在Windows 11的任务栏时钟中精确查看当前时间的秒数,可以通过系统设置、注册表编辑或第三方工具实现。此功能有助…

    2025年12月5日
    000
  • mysql怎么设置字符集

    一、字符集的概念 字符集规范了代码与字符之间的映射关系,指定了计算机字符的编码方式。不同数据库系统中的字符集设置可能不同,而不同字符集之间有独特的特点和优势。相较于Latin1/Latin7,GB2312/GBK/GB18030在处理汉字方面具有更大的优势。 在MySQL中,字符集指的是编码字符数据…

    数据库 2025年12月5日
    000
  • 如何用PHP实现数据分页?高性能分页类设计

    分页在web开发中通过限制查询结果并获取当前页数据实现,php可通过封装分页类兼顾性能与复用性。1. 分页核心是使用sql的limit和offset动态计算偏移量和每页数量;2. 高性能分页应避免大偏移量、缓存总记录数、只查必要字段、利用索引排序;3. 可复用分页类需接收总记录数、当前页码等参数,并…

    2025年12月5日 后端开发
    000

发表回复

登录后才能评论
关注微信