【SQL】索引失效的11种情况

数据库调优的大致方向:

  • 索引失效,没有充分利用到索引——建立索引
  • 关联查询太多join——sql优化
  • 服务器调优及各个参数设置——my.cnf
  • 数据过多——分库分表

sql查询优化技术有很多,大体分为物理查询优化逻辑查询优化:

  • 物理查询优化:通过索引和表连接方式等技术进行优化
  • 逻辑查询优化:通过SQL等价变换提升查询效率,就是换一种sql写法

数据准备:

CREATE DATABASE atguigudb2;
USE atguigudb2;

#############    class 表    #################
CREATE TABLE `class` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`className` VARCHAR(30) DEFAULT NULL,
`address` VARCHAR(40) DEFAULT NULL,
`monitor` INT NULL ,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

#############    student 表    #################
CREATE TABLE `student` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`stuno` INT NOT NULL ,
`name` VARCHAR(20) DEFAULT NULL,
`age` INT(3) DEFAULT NULL,
`classId` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`)
#CONSTRAINT `fk_class_id` FOREIGN KEY (`classId`) REFERENCES `t_class` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

#################################

SET GLOBAL log_bin_trust_function_creators=1; # 不加global只是当前窗口有效。

#随机产生字符串
DELIMITER //
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT
'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMN
  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SQL 中使用 LIKE 操作符进行模糊匹配时,如果没有正确使用索引,可能会导致索引失效,从而影响查询性能。以下是一些可能导致 LIKE 索引失效情况: 1. 前导通配符:如果 LIKE 表达式以通配符 '%' 开头,索引将无法有效利用。例如,"WHERE column LIKE '%abc'",这情况下索引将无法生效。 2. 不适当的通配符位置:如果 LIKE 表达式中的通配符位于开头和结尾之间,而不是结尾之后,索引的效果可能会减弱。例如,"WHERE column LIKE 'abc%def'",索引可能无法完全匹配。 3. 多个通配符:如果 LIKE 表达式中包含多个通配符,如 '%' 或 '_',索引可能无法生效。例如,"WHERE column LIKE '%abc%def%'",这情况下索引可能无法使用。 4. 字符集问题:如果列的字符集与 LIKE 表达式中的字符集不匹配,索引可能无法使用。确保字符集一致可以提高索引的效果。 5. 数据类型问题:如果列的数据类型与 LIKE 表达式中的数据类型不匹配,索引可能无法使用。确保数据类型一致可以提高索引的效果。 为了让 LIKE 操作符在查询中有效利用索引,可以考虑以下方法: - 尽量避免在 LIKE 表达式的开头使用通配符。 - 使用索引友好的通配符位置,将通配符放在结尾之后。 - 避免使用多个通配符。 - 确保字符集和数据类型一致。 如果以上方法无法解决问题,可以考虑其他技术手段,如全文搜索引擎或者使用其他类型的索引(如全文索引),以满足模糊查询的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值