优化的数据库搜索算法
optimized data base search algorithm
我正在开发一个可以从移动客户端访问的 api 网站,该应用类似于 http://zomato.com/
假设我们有 table 辆汽车(carID、型号、制造商、变速器、fuleType、其他选项)
用户可以查询任何字段,查询也可能包括其他 table 中的字段,例如,如果我为制造商和模型创建单独的 table。
我当然可以在所有字段上使用 like 子句进行查询,这种方法正确吗?什么时候可能有数千条记录?
在使用移动应用程序或网站时,我需要快速的数据库响应实时查询。
我最熟悉 .Net,但如果您给我任何其他建议并指导我完成起点(库、现有开源项目),我将很高兴。
注意:用户将只有一个搜索字段和可选过滤器,如型号、类别等...
这是我会做的。
使用 IQueryable
构建您的查询。您可以使用 if 语句来检查您的任何参数是否有值,如果有,则将 where 语句附加到您的查询中。一旦您的查询全部设置好,使用 .ToList
或 .AsEnumerable
.
将其发送到内存
public List<Data> Search (string param1, string param2)
{
IQueryable<Data> query = db.SomeTable;
if (!String.IsNullOrEmpty(param1))
query = query.Where(m => m.Field1 == param1); // might use contain depending on your use case
if (!String.IsNullOrEmpty(param2))
query = query.Where(m => m.Field2 == param2);
return query.ToList();
}
我还会使用 Skip
和 Take
进行分页。
编辑:我想指出,这与我所知道的数据库一样快,如果其他人知道更快的功能,请告诉我。您可以通过使用 NoSQL 数据库和静态文档来实现更快的响应,但是对于数千条记录,数据库应该可以正常工作。
我正在开发一个可以从移动客户端访问的 api 网站,该应用类似于 http://zomato.com/
假设我们有 table 辆汽车(carID、型号、制造商、变速器、fuleType、其他选项)
用户可以查询任何字段,查询也可能包括其他 table 中的字段,例如,如果我为制造商和模型创建单独的 table。
我当然可以在所有字段上使用 like 子句进行查询,这种方法正确吗?什么时候可能有数千条记录?
在使用移动应用程序或网站时,我需要快速的数据库响应实时查询。
我最熟悉 .Net,但如果您给我任何其他建议并指导我完成起点(库、现有开源项目),我将很高兴。
注意:用户将只有一个搜索字段和可选过滤器,如型号、类别等...
这是我会做的。
使用 IQueryable
构建您的查询。您可以使用 if 语句来检查您的任何参数是否有值,如果有,则将 where 语句附加到您的查询中。一旦您的查询全部设置好,使用 .ToList
或 .AsEnumerable
.
public List<Data> Search (string param1, string param2)
{
IQueryable<Data> query = db.SomeTable;
if (!String.IsNullOrEmpty(param1))
query = query.Where(m => m.Field1 == param1); // might use contain depending on your use case
if (!String.IsNullOrEmpty(param2))
query = query.Where(m => m.Field2 == param2);
return query.ToList();
}
我还会使用 Skip
和 Take
进行分页。
编辑:我想指出,这与我所知道的数据库一样快,如果其他人知道更快的功能,请告诉我。您可以通过使用 NoSQL 数据库和静态文档来实现更快的响应,但是对于数千条记录,数据库应该可以正常工作。