首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏往期博文

    MySQL学习10:视图&事务&索引

    开启事务 begin; 或者 start transaction; 提交事务 commit; 回滚事务 rollback; 索引 Index 索引目的 类似字典前的目录,索引用来加快查找的速度。 索引原理 基层原理不作深究,表面上索引就是加速查找用到的树结构。 查看索引 show index from 表名 创建索引 若指定字段是字符串,需要指定长度,最好长度保持一致。 create index 索引名称 on 表名(字段名称(长度)); 删除索引 drop index 索引名称 on 表名; 索引注意事项 1.主键,外键默认就是索引。 2.不需要频繁查找的字段无需建立索引索引过多会影响数据更新的速度(更新数据的同时要更新索引)

    81410编辑于 2022-06-14
  • 来自专栏小雨的CSDN

    10.MySQL索引(必考要点)

    1.索引 1)索引概念 索引 :好比书的目录,是为了加快查找的效率,如果数据库中没有索引,此时查找的时候就需要把整个表都遍历一遍,就有点像“顺序表查找”,针对数据库进行查找,数据库在磁盘上,磁盘访问速度很慢 2.索引也会占用一定的磁盘空间和内存空间(空间换时间) 3.给具体表中的每一列来加索引的时候,加在主键上的索引和加在其他列上的索引不同 4)索引应用场景 主要用在查找很频繁,但是插入、删除、修改都不频繁的场景 5)索引的使用 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)(关联到哪个列就在哪个列建立索引)时,会自动创建对应列的索引。 a.查看索引: show index from 表名; b.创建索引: create index 索引名 on 表名(字段名); 例:create index idx_classes_name on classes(name); c.删除索引: (主键的索引不能删) drop index 索引名 on 表名; 例如:drop index idx_classes_name on classes

    32020编辑于 2022-10-26
  • 来自专栏全栈测试技术

    MySql基础-笔记10-索引

    1、说明索引可以大大提高MySQL的检索速度;索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。 组合索引,即一个索引包含多个列;创建索引时,需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件);索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录;过多的使用索引将会造成滥用 ,虽然索引大大提高了查询速度,同时却会降低更新表的速度;建立索引会占用磁盘空间的索引文件。 DROP INDEX [indexName] ON mytable; 3、唯一索引它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。 删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。6、显示索引信息你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。图片

    35450编辑于 2023-01-31
  • 来自专栏Web技术布道师

    10 分钟掌握 MySQL索引查询优化技巧

    本文的内容是总结一些MySQL的常见使用技巧,以供没有DBA的团队参考。以下内容以MySQL5.5为准,如无特殊说明,存储引擎以InnoDB为准。 MySQL的特点 了解MySQL的特点有助于更好的使用MySQLMySQL和其它常见数据库最大的不同在于存在存储引擎这个概念,存储引擎负责存储和读取数据。 www.baidu.com' 如果数据量比较多,为防止哈希冲突,可自定义哈希函数,或用MD5函数返回值的一部分作为哈希值: SELECT CONV(RIGHT(MD5('www.baidu.com'),16), 16, 10 查询优化 查询慢的原因 是否向数据库请求了多余的行 比如应用程序只需要10条数据,但是却向数据库请求了所有的数据,在显示在UI上之前抛弃了大部分数据。 索引覆盖扫描 增加汇总表 增加内存缓存系统记录数据条数 关联查询的优化 MySQL优化器关联表查询是这样进行的,比如有两个表A和B通过c列关联,MySQL会遍历A表,然后根据遍历到的c列的值去B表中查找数据

    1.4K20发布于 2019-05-15
  • 来自专栏全栈程序员必看

    mysql 前缀索引_MySQL前缀索引

    有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。 前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。 前缀索引的选择性 使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。 MySQL 无法使用前缀索引做 ORDER BY 和 GROUP BY , 也无法使用前缀索引做覆盖扫描。 后缀索引 MySQL 没有提供后缀索引,事实上,一些业务场景对后缀匹配选择性更高,比如我曾经参与过的项目,手机的入网标示imei号,前缀都是86等固定的国家编号开头,这个时候可以将字符反转后存储,就可以建立选择性较高的前缀索引

    7K30编辑于 2022-08-25
  • 来自专栏全栈程序员必看

    mysql前缀索引使用,Mysql:前缀索引索引

    可以像普通索引一样使用mysql前缀索引吗? 解决方法: 如果你想一下,MySQL仍会给你正确的答案,即使没有索引…它只是不会那么快……所以,是的,你仍然会得到一个正确的答案前缀索引. 前缀索引的排序不超出前缀的长度.如果您的查询使用完整索引来查找行,您通常会发现返回的行是按索引顺序隐式排序的.如果您的应用程序需要这种行为,那么它当然会期待它不应该期望的东西,因为除非您显式ORDER 并且,前缀索引不能用作覆盖索引.覆盖索引是指SELECT中的所有列恰好包含在一个索引中的情况(加上可选的主键,因为它也总是存在).优化器将直接从索引读取数据,而不是使用索引来标识要在主表数据中查找的行. 标签:mysql,indexing,innodb 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142503.html原文链接:https://javaforall.cn

    7.5K20编辑于 2022-08-25
  • 来自专栏全栈程序员必看

    mysql 添加索引 mysql 如何创建索引

    1.添加PRIMARY KEY(主键索引mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 例:alter table yx_marketing_details add index(id); 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE (`column` ) 3.添加INDEX (普通索引) mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 4.添加FULLTEXT(全文索引) mysql >ALTER TABLE `table_name` ADD FULLTEXT ( `column`) 5.添加多列索引 mysql>ALTER TABLE `table_name` ADD INDEX

    13.4K20编辑于 2022-09-05
  • 来自专栏全栈程序员必看

    Mysql覆盖索引_mysql索引长度限制

    只扫描索引而无需回表的优点: 1.索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。 (innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询) 覆盖索引必须要存储索引列的值,而哈希索引、空间索引和全文索引不存储索引列的值,所以mysql 当发起一个索引覆盖查询时,在explain的extra列可以看到using index的信息 覆盖索引的坑:mysql查询优化器会在执行查询前判断是否有一个索引能进行覆盖,假设索引覆盖了where条件中的字段 如上图则无法使用覆盖查询,原因: 1.没有任何索引能够覆盖这个索引。因为查询从表中选择了所有的列,而没有任何索引覆盖了所有的列。 2.mysql不能在索引中执行LIke操作。 mysql能在索引中做最左前缀匹配的like比较,但是如果是通配符开头的like查询,存储引擎就无法做比较匹配。

    11.1K30编辑于 2022-09-27
  • 来自专栏技术博文

    mysql索引

    B树索引Mysql数据库中使用最频繁的索引类型,基本所有存储引擎都支持BTree索引。 通常我们说的索引不出意外指的就是(B树)索引(实际是用B+树实现的,因为在查看表索引时,mysql一律打印BTREE,所以简称为B树索引) 2. 索引算法有 BTree算法和Hash算法 1. BTree算法 BTree是最常用的mysql数据库索引算法,也是mysql默认的算法。 在mysql中,含有空值的列很难进行查询优化,因为它们使得索引索引的统计信息以及比较运算更加复杂。 所以,在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的。

    3.5K30发布于 2021-09-28
  • 来自专栏Linux运维学习之路

    MySQL索引

    例如,对一个CHAR(100)类型的字段进行全文   检索需要的时间肯定要比对CHAR(10)类型的字段需要的时间要多。 6.尽量使用前缀来索引   如果索引字段的值很长,最好使用值的前缀来索引。 Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(10 5、possible_keys 指出MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 6、key 显示MySQL在查询中实际使用的索引, 若没有使用索引 ,不是通过表内检索出的) 8、ref 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 9、rows 表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数 10 7、where条件中有like 并且'%a%',可以支持'a%',但是不一定 8、没有查询条件,或者查询条件没有建立索引 9、索引本身失效 10、对小表查询 11、统计数据不真实 12、CBO计算走索引花费过大的情况

    5.2K50发布于 2018-03-29
  • 来自专栏学习

    MySQL索引

    一、什么是索引 MySQL索引的一种数据结构,他可以帮助数据库高校的查询、更新数据表中的数据。通过一定的排序规则排列数据表中的记录,加快对表的查询。 在大量的数据中,如果没有索引需要扫描整个表,如果有了索引,那么可以快速定位。 实现数据库的唯一约束:通过创建唯一索引,可以确保表中某列或某组列的数据值具有唯一性。 优化连接操作:在多表连接查询时,索引可以帮助数据库更快的找到连接。 三、索引的分类 哈希索引 结构特点:基于哈希表实现,通过索引键的哈希值直接定位数据位置,类似字典的“键-值”映射。 优势:时间复杂度为O(1),查找速度快 局限性:1.主要:不支持范围查找、排序和模糊查询;2.哈希冲突影响性能;3.MySQL并没有选择哈希作为默认数据结构,仅Memory默认支持。 MySQL索引采用的数据结构。 2.查询方式:与B树类似,但是其可以利用叶子节点的链表结构,快速遍历范围内的所有数据。

    32210编辑于 2025-07-21
  • 来自专栏shysh95

    MySQL索引

    索引需要保存到磁盘上,假设我们使用平衡二叉树来存储,一个100万个节点的二叉树高20,一次查询需要访问20个数据块,机械硬盘随机读取一个数据块大约需要10ms时间,因此单独访问一个行大约需要200ms时间 InnoDB; insert into t(id, name, k) values (1, 'Java', 100), (2, 'Python', 200), (3, 'Go', 300), (5, 'MySQL 上述语句中有两棵索引数,一棵是主键索引,另一棵为非主键索引。 主键索引和非主键索引的区别? 主键索引又称聚簇索引,主键索引的叶子节点存储的是整行数据 非主键索引又称二级索引,非主键索引的叶子结点存储的是主键的值 假设我们有以下两个SQL语句: -- SQL1 select * from t where 该索引k覆盖了我们的查询需求,因此称之为覆盖索引。 最左前缀原则 B+树索引结构,可以利用索引的最左前缀来定位记录。索引项是按照索引定义里面出现的字段顺序进行排序。

    4.9K20编辑于 2022-02-16
  • 来自专栏宇宙之_一粟

    MySQL索引

    索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构: 二叉树 红黑树 哈希 B-Tree 二叉树容易退化成链表 红黑树层数太高 哈希不满足范围查找 B-Tree 叶节点具有相同的深度,叶节点的指点为空 所有索引元素不重复 节点中的数据索引从左到右递增排列 B+ Tree(B-Tree变种) 非叶子节点不存储data,只存储索引(冗余), 可以放更多的索引 叶子节点包含所有索引字段 叶子节点用指针连接 ,提高区间访问的性能 InnoDB 索引实现(聚集) 表数据文件本身就是按B+ Tree组织的一个索引结构文件 聚集索引-叶节点包含了完整的数据记录 为什么InnoDB表必须有主键,并且推荐使用整型的自增主键 (不推荐使用UUID作为主键,尽量用自增整型) 为什么非主键索引结构叶子节点存储的是主键值?(一致性和节省存储空间) 联合索引的底层存储结构长什么样? 最左前缀法则

    3.7K10编辑于 2022-05-13
  • 来自专栏友儿

    mysql 索引

    MySQL在创建数据表的时候创建索引MySQL中创建表的时候,可以直接创建索引。 (字段名 数据类型 [完整性约束条件], [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY [索引名 表示索引为唯一性索引。 FULLTEXT;可选。表示索引为全文索引。 SPATIAL:可选。表示索引为空间索引。 INDEX和KEY:用于指定字段为索引,两者选择其中之一就可以了,作用是一样的。 索引名:可选。给创建的索引取一个新名称。 字段名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段。 长度:可选。指索引的长度,必须是字符串类型才可以使用。 ASC:可选。表示升序排列。

    3.4K20编辑于 2022-07-27
  • 来自专栏code人生

    MySQL 索引

    而通过使用索引,数据库系统可以快速定位到满足查询条件的数据行,从而大大提高查询性能。 在MySQL中,索引的实现方式有两种:Hash和B+Tree。 2. 索引的分类 索引通常是在表的某个列或多个列上创建的,常见的索引类型包括: •单列索引: 在单个列上创建的索引,用于加速基于该列的查询操作。 •组合索引: 又称联合索引在多个列上创建的索引,用于加速基于这些列的组合查询操作。组合索引可以提高多列查询的性能,但也需要注意索引的顺序和选择,以确保最佳的查询效率。 最左匹配原则是组合索引优化的核心原则之一,它指的是在使用组合索引进行查询时,查询条件中的列必须从索引的最左侧列开始,按照创建索引时的顺序逐一匹配。只有在查询条件中使用了索引的最左侧列,索引才能被利用。 •唯一索引: 确保索引列中的值是唯一的,即索引列的值不允许重复。唯一索引通常用于加速对唯一值的查询,例如主键列或唯一约束列。•主键索引: 是一种特殊的唯一索引,用于标识表中的唯一记录。

    2.2K10编辑于 2024-03-25
  • 来自专栏java,hbase

    MySQL索引

    索引分类 单值索引:即一个索引只包含单个列,一个表可以有多个单列索引。 唯一索引索引列的值必须唯一,但允许有空值。(主键列不允许有空值) 复合索引:即一个索引包含多个列。  如果弄乱了顺序如 c,b,a,mysql也会自动帮你改为a,b,c。这就是mysql最左原则,查询条件里面要有复合索引最左边的那个字段才会用到索引。 1)找到mysql配置文件my.ini 2)在my.ini最后增加一行,如:ft_min_word_len=2 3)重启mysql生效  使用 Match()        指定被搜索的列 排除,词必须不出现 > 包含,且增加等级值        等级越高显示在上面 < 包含,且减少等级值 () 把词组成表达式 ~ 取消一个词的排序值 * 词尾的通配符 " " 定义一个短语 注意:在MySQL 5.6版本以前,只有MyISAM存储引擎支持全文引擎.在5.6版本中,InnoDB加入了对全文索引的支持,但是不支持中文全文索引.在5.7.6版本,MySQL内置了ngram全文解析器,用来支持亚洲语种的分词

    2K20编辑于 2023-10-15
  • 来自专栏Kubernetes 与 Devops 干货分享

    Mysql索引

    Without an index, MySQL must begin with the first row and then read through the entire table to find 索引实现原理 要搞清楚索引的实现原理,先看看索引的底层实现,MySQL索引大部分采用B-Tree实现,B-Tree又有B-树和B+树。还有一些使用Hash索引。 二叉搜索树的查找就可以使用二分查找,如果要查找10,因为10比27小,所以往左孩子找,10<14,还在左孩子找。最坏的情况下,查找的次数等于树的高度。 因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列, 则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。

    3.3K20编辑于 2022-10-31
  • 来自专栏开源部署

    MySQL 索引

    如果没有索引MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多。 MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE MEMORY/HEAP存储引擎:支持HASH和BTREE索引 MySQL目前主要有以下几种索引类型: 单列索引(普通索引 、唯一索引、主键索引) 组合索引 全文索引 空间索引 2.1、单列索引-普通索引 MySQL中普通索引并没有什么限制,纯粹为了查询数据更快一点。 : 显示了mysql使用索引的长度(也就是使用的索引个数),当 key 字段的值为 null时,索引的长度就是 null。 注意,key_len的值可以告诉你在联合索引mysql会真正使用了哪些索引。 ref: 给出关联关系中另一个数据表中数据列的名字。

    14K20编辑于 2022-09-15
  • 来自专栏ljw

    索引MySQL

    delimiter $$ create function rand_num() returns int(5) begin declare i int default 0; set i = floor(10 return i; end $$ delimiter ; --创建存储过程,向雇员表添加海量数据 delimiter $$ create procedure insert_emp(in start int(10 ),in max_num int(10)) begin declare i int default 0; set autocommit = 0; repeat set i = i + 1; mysql mysql 1024 Jun 13 13:33 mtest.MYI --该表对应的主键索引数据 其中, MyISAM 这种用户数据与索引数据分离的索引方案,叫做非聚簇索引 --终端A mysql drop index 索引名; 索引名就是show keys from 表名中的 Key_name 字段 mysql> alter table user10 drop index idx_name; 第三种方法方法

    53210编辑于 2025-05-31
  • 来自专栏星尘的一个朋友

    MySQL 索引

    索引的常见模型 hash 索引、数组索引、树索引 索引是属于存储引擎内的内容,由存储引擎来提供。 InnoDB 索引模型 b+树 基于主键索引和普通索引的查询有什么区别? 主键索引内存储的是行数据 普通索引存储的是主键数据 主键长度越小,普通索引的叶子节点就越小,普通索引占用的空间也就越小。 只有一个索引;该索引必须是唯一索引。你一定看出来了,这就是典型的 KV 场景。 这个最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。 在建立联合索引的时候,如何安排索引内的字段顺序。 这里我们的评估标准是,索引的复用能力。 比如上面这个市民表的情况,name 字段是比 age 字段大的 ,那我就建议你创建一个(name,age) 的联合索引和一个 (age) 的单字段索引索引下推 MySQL 5.6 新功能索引下推。

    3.9K20编辑于 2022-05-11
领券