试图改进这个查询

时间:2012-03-27 15:27:54

标签: sql database select query-optimization

我正在尝试提高此查询的性能。我可以做些什么来优化它?

SELECT * FROM bldng 
WHERE bldng_type LIKE '%PTR%' OR bldng_type LIKE '%FACILITY-A%' 
OR bldng_type LIKE '%FACILITY-B%' AND area_sqf > 500

5 个答案:

答案 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编制索引并仅指定所需的列而不是使用*可能有所帮助。