记一次mysql 执行查询语句卡死的问题

探讨了在处理大规模数据时,SQL查询中NULL值对索引的影响,及如何优化查询语句避免性能瓶颈。

背景

两张表里面都有上亿条数据, 写了一条左联的查询语句, 比如这样

select a.city, b.value from tablea as a left join tableb as b on a.cid = b.cid where a.source = 10

然后语句执行就卡死了,
实际上这条语句在tablea 只有30条数据, 在tableb没有数据,
然后用 explain 查看语句也走索引了, 只查了几百行
用 SHOW PROCESSLIST 查看发现语句处于 sending data
那么问题来了, 为啥呢…

问题原因

通过查询发现, 因为是之前的老数据, 比较脏, 所以在a表里 cid 竟然会有为null和空的数据, 然后众所周知, 字段为null时是会影响索引的…两张表都有上亿的数据, 你们懂得

字段为null 走不走索引

很多人都默认感觉不走, 但经测试其实是走的, 但是, 在某种情况下是不走的

is null   走索引
is not null 走索引
is not null or is null  不走索引

emmmm 我难道是触发到这个了? 但确实是这个为null数据的问题

问题解决

知道问题就很简单了, where 语句加一个 is not null 就可以了(ps: 表不是我们的, 所以也不方便改表, 建议建表都加默认值)

### MySQL安装过程中设置密码卡死解决方案 当遇到MySQL安装过程中的设置密码环节出现卡死的情况时,可以尝试以下方法来解决问题。 #### 方法一:跳过权限表初始化 如果是在初次安装MySQL的过程中遇到了此问题,则可以在启动服务的时候加上`--skip-grant-tables`参数以跳过权限表的初始化[^1]。这允许管理员无需输入密码即可登录数据库并执行必要的配置更改。 ```bash mysqld --skip-grant-tables & ``` #### 方法二:修改my.cnf文件 另一种方式是编辑MySQL配置文件`/etc/my.cnf`或`C:\ProgramData\MySQL\MySQL Server X.X\my.ini`(视操作系统而定),找到[mysqld]部分,在其中加入如下两行内容后保存退出再重启服务[^2]: ```ini [mysqld] init-file=C:/mysql-init.txt # Windows路径示例;对于Linux则是绝对路径指向包含SQL命令的文本文件 ``` 创建上述指定位置下的`mysql-init.txt`文件,并写入重置root账户密码所需的SQL语句: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES; ``` #### 方法三:通过安全模式重新设定Root用户密码 还可以利用系统的恢复控制台或者单用户模式进入系统之后运行下面这条指令完成对root用户的认证信息更新操作[^3]: ```bash mysqladmin -u root password 新密码 ``` 以上三种途径均能有效处理因各种原因造成的MySQL安装期间无法正常设置初始管理账号凭证的问题。建议按照实际情况选取合适的方法来进行修复工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小僵尸打字员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值