mysql字段对索引的影响

本文讨论了一个涉及工号字段的设计案例,该字段同时包含整数和字符串类型的数据。为了避免索引失效的问题,在进行查询时,即使对于数值类型的工号也应当统一使用引号包裹,确保查询效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这几天做了个需求,设计到一个工号的字段,这个字段有些是可以存为整数的,有些必须是字符,所以在数据表中字段的类型设置为了varchar的字符型

但是同事在写sql的时候,where中做了判断,如果工号是整数的,那么就不加引号,字符就加引号

比如:

auid是varchar的类型

select * from member where auid=1234 or auid='T2322'

当然这在查询的时候是可以查到这工号的,但是如果对auid建了索引,这样的查询是用不到索引的

select * from member where auid=‘1234’ or auid='T2322'

这样写才能用到索引,都加上引号

### 如何在 MySQL 中为字段创建索引 #### 创建索引的一般语法 为了提高查询效率,在适当的情况下可以考虑为特定字段创建索引。对于普通的非JSON类型的字段,如日期字段,可以通过如下SQL语句来创建索引: ```sql ALTER TABLE `table_name` ADD INDEX `index_name` (`column_name`); ``` 此命令会在名为 `table_name` 的数据表中的 `column_name` 列上建立一个新的索引,并将其命名为 `index_name`[^4]。 #### 针对 DATE 类型字段的具体操作 当目标字段的数据类型是 `DATE` 或者其他时间相关类型时,同样适用上述方法来进行索引的创建。例如,假设有一个记录学生信息的日志表 `student_log` ,其中包含了一个表示入学日期的 `enrollment_date` 字段,则可以在该字段上构建索引来加速基于这个字段的检索过程: ```sql ALTER TABLE `student_log` ADD INDEX `idx_enrollment_date` (`enrollment_date`); ``` 这将会显著提升涉及 `enrollment_date` 查询的速度,尤其是在处理大量历史数据的时候[^1]。 #### JSON 字段上的特殊处理 值得注意的是,如果需要针对存储于 JSON 格式的文档内的属性创建索引,则需采用不同的方式。具体来说,应该利用虚拟生成列配合函数提取出感兴趣的值之后再建索引。下面是一个例子,展示了怎样在一个叫做 `product_info` 表里边含有产品详情 JSON 对象的 `details` 列中,根据 JSON 路径表达式 `.price` 来设置索引的方法: ```sql CREATE VIRTUAL COLUMN price_extracted AS (CAST(JSON_UNQUOTE(JSON_EXTRACT(details, '$.price')) AS DECIMAL(10,2))); CREATE INDEX idx_price ON product_info(price_extracted); ``` 这里先通过定义一个计算列 `price_extracted` 把价格数值解析出来,然后再以此为基础建立了常规索引 `idx_price`[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值