我目前在我的数据库中有这个表(myTable):
user start
----------------------------
Adam 12345
Alex 123
Benny 2345
在我的程序中,我接受来自用户的字符串,例如:12345678
我的目标是选择用myTable.Start
开始用户输入的行-- For example, it would be great to have something like:
select * from myTable where "12345678".startsWith(start)
-- and returns me Adam, 12345 & Alex, 123
截至目前,我正在使用
select user, start
from myTable where charindex(start, "12345678") = 1
order by start desc
做了这项工作,但是在绝对糟糕的表现中,myTable行数大约接近一百万,我不确定索引开始是否有帮助,因为我没有在这种情况下进行直接比较。
有谁知道更好的方法来实现这个目标?
答案 0 :(得分:0)
试试这个,
select user, start
from myTable
where '12345678' like start+'%'
order by start desc
还要为列start添加索引。
答案 1 :(得分:-1)
您应该使用模式匹配运算符LIKE运算符并为列添加索引,例如:
select user, start
from myTable where start LIKE "12345678%"
order by start desc
如果索引性能不如以前那么糟糕 - 服务器必须检查所有行的匹配。
使用索引,操作变为范围搜索:其中start大于或等于12345678
但小于下一个更高字符串的行(12345679
)。范围搜索可以使用索引并仅加载处理匹配的行
修改强>
糟糕,错过了查询尝试相反的操作 - 找到可以充当字符串前缀的行。这不能用索引加速,因为它等同于
"someconstantvalue" LIKE start +'%'
这个有在匹配之前为每一行生成一个新值,所以不能使用任何索引