mysql如何给text字段添加索引_MySQL 是如何利用索引的

阅读本文大概需要 4 分钟。

一、前言

在 MySQL 中进行 SQL 优化的时候,经常会在一些情况下,对 MySQL 能否利用索引有一些迷惑。例如:

  1. MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件?
  2. MySQL 在 LIKE 进行模糊匹配的时候又是如何利用索引的呢?
  3. MySQL 到底在怎么样的情况下能够利用索引进行排序?

今天,我将会用一个模型,把这些问题都一一解答,让你对 MySQL 索引的使用机制有进一步的了解。

二、知识补充

key_len

EXPLAIN 执行计划中有一列 key_len 用于表示本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择了。

在这里 key_len 大小的计算规则是:

  1. 一般地,key_len 等于索引列类型字节长度,例如 int 类型为4 bytes,bigint 为 8 bytes;
  2. 如果是字符串类型,还需要同时考虑字符集因素,例如:CHAR(30) UTF8 则 key_len 至少是 90 bytes;
  3. 若该列类型定义时允许 NULL,其 key_len 还需要再加 1 bytes;
  4. 若该列类型为变长类型,例如 VARCHAR(TEXTBLOB 不允许整列创建索引,如果创建部分索引也被视为动态列类型),其 key_len 还需要再加 2 bytes;

三、哪些条件能用到索引

首先非常感谢登博,给了我一个很好的启发,我通过他的文章,然后结合自己的理解,制作出了这幅图:

f1cfc1fabeafcb42a6a374180afc6315.png

乍一看,是不是很晕,不急,我们慢慢来看图中一共分了三个部分:

Index Key:MySQL 是用来确定扫描的数据范围,实际就是可以利用到的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,可以使用ALTER TABLE语句来为表中的字段添加索引。具体的语法如下: ALTER TABLE <表名> ADD INDEX (<字段>); 例如,如果我们要为test表中的t_name字段添加一个索引,可以执行以下语句: ALTER TABLE test ADD INDEX (t_name); 执行成功后,可以使用DESCRIBE语句来查看表的结构,可以看到t_name字段Key一栏由原来的空白变成了MUL。MUL表示该列是一个非唯一索引的前导列或者是一个唯一性索引的组成部分但是可以含有空值NULL。[1] 此外,MySQL还支持其他类型索引,包括主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)和全文索引(FULLTEXT)。可以使用类似的语法来添加这些索引。例如,添加主键索引可以使用以下语句: ALTER TABLE table_name ADD PRIMARY KEY (column); 添加唯一索引可以使用以下语句: ALTER TABLE table_name ADD UNIQUE (column); 添加普通索引可以使用以下语句: ALTER TABLE table_name ADD INDEX index_name (column); 添加全文索引可以使用以下语句: ALTER TABLE table_name ADD FULLTEXT (column); 还可以添加多列索引,语法类似: ALTER TABLE table_name ADD INDEX index_name (column1, column2, column3);[2] 需要注意的是,索引的选择应该根据具体的需求和查询场景来进行,不同类型索引有不同的适用场景。唯一索引主要用于保证数据记录的唯一性,而普通索引和全文索引则可以用于加快查询速度。[3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值