首页新闻找找看学习计划

SQL中不等于的条件如何使用索引

0
悬赏园豆:20 [待解决问题]

MySQL数据库,定义了索引列
但是查询必须要加上这个列不等于空这个条件
!= ''
is not null
都会使索引失效
数据表记录有上千万条,所以查出来要20秒
如何使用索引解决这个问题呢?
请大佬帮忙解决

寻找薛定谔的猫的主页 寻找薛定谔的猫 | 初学一级 | 园豆:87
提问于:2019-04-22 09:25
< >
分享
所有回答(4)
0

不要插入null,插入一个特殊字符可以吗?把sql改成两部分,一部分是小于这个特殊字符的,另一部分是大于这个特征字符的,然后再union在一起。试试速度怎么样

会长 | 园豆:6275 (大侠五级) | 2019-04-22 09:46

可以不修改默认值实现吗
很多地方都用到这个字段,这里一改就都得动了
而且是二次开发,原来程序哪里用到都不清楚,包括底层封装的dll也有用
可以添加索引或者新建字段

支持(0) 反对(0) 寻找薛定谔的猫 | 园豆:87 (初学一级) | 2019-04-22 10:26

@寻找薛定谔的猫: 这样的话我觉得可能没救了,都不可以动表。

要不你新建一个表,在新建表里重新设置索引,把字段设置为非空,把旧数据都导入进去了,再写个触发器,同步更新或插入到新表里,然后你在新表上操作

支持(0) 反对(0) 会长 | 园豆:6275 (大侠五级) | 2019-04-22 10:30

@会长: 这个字段值存放数字,且不会为负数。我判断这个字段是否大于零可以吗?大于或小于应该可以使用索引吧。就是有null的值,null>0的结果还是null。实在不行我把默认值为null的都设置为空字符。

支持(0) 反对(0) 寻找薛定谔的猫 | 园豆:87 (初学一级) | 2019-04-22 14:43
0

添加一个字段,用这个字段保存那个字段是否为 NULL 的信息,查询时使用这个字段

dudu | 园豆:38642 (高人七级) | 2019-04-22 10:34
0

只能改表了,使用不等于就用不到索引。

不知怎么办才好 | 园豆:314 (菜鸟二级) | 2019-04-22 10:35
0

where子句中查询的列执行了 “is null” 或者 “is not null” 或者 “<=> null”,是会走索引的,
依据官方文档:https://dev.mysql.com/doc/refman/5.6/en/is-null-optimization.html
我有疑问的是,你的索引是不是建立的不合适啊?多个条件,建立一个包含这个字段的复合索引试下。

另外,强烈建议改表,所有字段设默认值,然后将数据一次性导过去;(不建议用触发器,不利于后期维护)。

Eric-Lee | 园豆:208 (菜鸟二级) | 2019-04-22 15:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册