如图所示cp 表和dinfo 2个表都是索有索引,他们2个查询的SQL区别在于一个加了and cp
.isvalid
= 1 AND dinfo
.isvalid
= 1 这个条件一个没有这个条件,但是执行计划确不一样。但是不明白为什么会造成这样的情况 请各位指点一下。
百度了一下,捣鼓了一会儿问题出在isvalid 这个字段,这个字段类型是bit型的,我又加了个isvalid2的字段类型为tinyint长度为1然后建索引
这时执行计划没走索引扫描了,网上说是因为bit是二进制的存在里面所以才有这样的问题还表高人给讲讲具体的原因
很简单的原因,我的SQL 是SELECT * FROM TABLE WHERE USERID=1 AND IAVALID=1 我们是MSSQL迁移TIDB用了一个软件把数据库导过去结果那个软件把MSSQL 里的BIT 形导入过去变成BIT(1) 由于BIT(1)类型是二进制的所以才会导致索引扫描全部索引没有RANG,所以把类型改成TINYINT(4)这样的类型就能命中索引了。