我正在尝试提高此查询的性能。我可以做些什么来优化它?
SELECT * FROM bldng
WHERE bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%'
OR bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500
答案 0 :(得分:1)
由于通配符前缀,您将对bldng
进行全面扫描。如果您可以删除通配符前缀,并在bldng_type
上添加索引,那么您的性能应该会大大提高。让%text%
很慢
答案 1 :(得分:1)
由于您使用'%search string%',两端的两个百分号会破坏这些列的索引。最好使用全文索引。如果您想要真正的性能和准确性,可以使用Lucene或Sphinx全文搜索引擎。
答案 2 :(得分:1)
看起来你正试图选择不同类别的建筑物。我建议在bldng表上放一个'bldng_category'列。这样您就可以使用这样的简单查询:
SELECT * FROM bldng 中的bldng_category('PTR','FACILITY_B','FACILITY-B')和area_sqf> 500
答案 3 :(得分:0)
如果您使用的是SQL Server,则可以使用Table Hints (MSDN link)。 NOLOCK很常见。
答案 4 :(得分:0)
为area_sqf
编制索引并仅指定所需的列而不是使用*
可能有所帮助。