我有一个MVC自动填充功能,可以搜索输入到文本框中的任意数量的字符串来查找地址。
例如,如果他们进入John Doe New York,我的查询将对customer表中的所有列(first,last,address,city,state,zip)执行LIKE,以查看它是否与该术语匹配。然后将移动到下一个搜索词并执行相同操作。
我的问题是,针对每个字段的每个搜索字词执行LIKE是否最好4次(在此示例中),或者最好返回大约10,000行并在内存中搜索它们作为列表?
第一个需要更多的数据库I / O,因为它搜索表格,但第二个需要更多的数据进入应用程序。
Customers表中的所有数据均未编入索引的全文搜索,并且最多只会在各列上显示SQL索引。
答案 0 :(得分:3)
一般部分
让DB完成工作更好
如果您使用4种查询方法,您将拥有:
如果你采用完全数据库方法,你将拥有
24*q1 + q2*4 + 24*q2 > 24*q1 + q2_filtered
所以答案很明显 - 数据库应该过滤记录
如果你想将整个客户表存储在内存中 - 当然执行你自己的搜索会更快24 * q1,所以你只能摆脱传输部分,但它将消耗web服务器内存你将遇到内存/数据库
之间的同步问题一些细节
取决于您如何使用 - 您可能会遇到非常不同的性能问题,例如like 'ABC%'
将使用索引,但like '%ABC%'
无法使用索引
这里有一些技巧,比如这一个:将所有列连接成1,对其中的符号进行排序并删除重复项,将符号存储在不同的列中,对于单词也是一样的 - 这将有所帮助,因为它可以使用索引,但你会有一些误报比赛
如果你真的需要快速获取数据 - 使用全文索引或特殊方法解决这个非常庞大的全局问题