在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列)
有没有人有这方面的经验?(在我写测试代码之前...)
发布于 2020-12-15 00:19:33
如果你有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) )发布于 2020-12-15 00:22:38
此外,另一个选择是创建一个计算列,甚至在其上放置索引,我认为这将是您在搜索中能获得的最佳性能:
在sql server中
alter table tablename
add column RFID as ((RFID1*256+RFID2)*256+RFID)*256+RFID4 --
go
create index myidx on mytable (RFID) 发布于 2020-12-15 00:31:40
由于这是一个四个字符的代码,并且(假设)总是四个字符,有什么特殊的原因不能使它成为一个单独的CHAR(4)列吗?当然,这可以被编入索引。
可以添加check约束以确保列中只能存储数字,如下所示
CONSTRAINT CK_MyTable_RFID_OnlyDigits CHECK (RFID not like '%[^0-9]%')https://stackoverflow.com/questions/65292478
复制相似问题