在sql中搜索RFID的最快方法是什么?如果具有具有4个字节作为标识符的RFID,这样我就可以搜索
Where u.RFID1 = a And u.RFID2 = z And u.RFID3 = e And u.RFID4 = r "
或者我可以把RFID做成一个大的
((RFID1*256+RFID2)*256+RFID)*256+RFID4 and search for that value.
SQL中最快的是什么?我的猜测是bigint(1列而不是4列(
有人有这方面的经验吗?(在我写测试代码之前…(
如果您有4个不同的列,那么对4列执行相等性检查几乎总是更快,从这些列中计算出一些内容并将其用于筛选。
因此:
where u.RFID1 = ? and u.RFID2 = ? and u.RFID3 = ? and u.RFID4 = ?
这可以利用(RFID1, RFID2, RFID3, RFID4)
上的索引。
另一方面,如果你想过滤所有4列的计算结果,那么一种选择是对表达式本身进行索引——如果你的数据库支持这个功能:
create index myidx on mytable( (((RFID1 * 256 + RFID2) * 256 + RFID) * 256 + RFID4) )
还有一个选项是制作一个计算列,甚至在上面加一个索引,我认为这将是搜索中最好的性能:
在sql server
中
alter table tablename
add column RFID as ((RFID1*256+RFID2)*256+RFID)*256+RFID4 --
go
create index myidx on mytable (RFID)
由于这是一个四个字符的代码,并且(大概(总是四个字符,您不能将其作为一个单独的CHAR(4)
列有什么特殊的原因吗?当然,这可以被编入索引。
可以添加一个检查约束,以确保只有数字可以存储在列中,类似于
CONSTRAINT CK_MyTable_RFID_OnlyDigits CHECK (RFID not like '%[^0-9]%')