一般来说,当有很多不同的可能性,列,表格,结果等时,如何从“高级搜索表单”生成的MySQL查询如何优化20-30个可选字段?
答案 0 :(得分:0)
一般来说,它们不会从数据库返回。对于具有许多字段选项的高级搜索,可能还会从搜索服务器(例如Lucene,Sphinx或Xapian)返回一些用于衡量标准的布尔逻辑。
从数据库返回几乎不可能有效地完成。它通常通过动态构建查询来完成,例如:
SELECT ... WHERE 1=1
然后,循环遍历其他字段并添加
AND field LIKE '%abc'
AND field_2 LIKE '%def%'
AND field LIKE 'GHI%'
希望在开始或结束时添加whildchar %
(出于性能原因),或者在字段数据中搜索两者。
构建和运行此查询使得几乎不可能有良好的索引,这使得它们变慢并且成为性能瓶颈的主要候选者。