MySQL数据库,定义了索引列
但是查询必须要加上这个列不等于空这个条件
!= ''
is not null
都会使索引失效
数据表记录有上千万条,所以查出来要20秒
如何使用索引解决这个问题呢?
请大佬帮忙解决
where子句中查询的列执行了 “is null” 或者 “is not null” 或者 “<=> null”,是会走索引的,
依据官方文档:https://dev.mysql.com/doc/refman/5.6/en/is-null-optimization.html。
我有疑问的是,你的索引是不是建立的不合适啊?多个条件,建立一个包含这个字段的复合索引试下。
另外,强烈建议改表,所有字段设默认值,然后将数据一次性导过去;(不建议用触发器,不利于后期维护)。
你这都是等于 如果不等于呢 != 这种 怎么优化才能走索引呀
@_小北Lee: 换成范围查询 > or < 这样查询
@_小北Lee: 最好用建一个联合索引 让它直接走覆盖索引这样更快
不要插入null,插入一个特殊字符可以吗?把sql改成两部分,一部分是小于这个特殊字符的,另一部分是大于这个特征字符的,然后再union在一起。试试速度怎么样
可以不修改默认值实现吗
很多地方都用到这个字段,这里一改就都得动了
而且是二次开发,原来程序哪里用到都不清楚,包括底层封装的dll也有用
可以添加索引或者新建字段
@寻找薛定谔的猫: 这样的话我觉得可能没救了,都不可以动表。
要不你新建一个表,在新建表里重新设置索引,把字段设置为非空,把旧数据都导入进去了,再写个触发器,同步更新或插入到新表里,然后你在新表上操作
@会长: 这个字段值存放数字,且不会为负数。我判断这个字段是否大于零可以吗?大于或小于应该可以使用索引吧。就是有null的值,null>0的结果还是null。实在不行我把默认值为null的都设置为空字符。
添加一个字段,用这个字段保存那个字段是否为 NULL 的信息,查询时使用这个字段
只能改表了,使用不等于就用不到索引。