SQL:如何减少多次查询同一个表..查询优化

时间:2013-12-29 05:52:29

标签: php mysql sql sql-server database

我的表包含公司列表以及位置(位置ID作为外键)

并且用户将在搜索框中的位置搜索公司,并且我想要返回与该位置匹配的公司(位置ID),如果该公司中没有公司存在,我想要显示可用的公司在其他位置(靠近要求的位置 - 根据GEO-SPACIAL坐标在不同的表格中以某种方式将位置映射到附近)

所以我的SQL要求这个过程如下

  1. 获取位置ID
  2.   

    $ loc_id = SELECT id FROM location WHERE location_name = $ locationTerm

    1. 使用该位置ID获取公司表中的公司
    2.   

      $ companies = SELECT * FROM companies WHERE location_id = $ loc_id

      1. 然后如果返回的查询少于行数(比如3),即$ companies.count()< 3 那么我们需要寻找附近的区域来提高公司的业绩。

      2. 从表格中获取附近的位置 NearByLcoations (多对多)包含附近的地点对

      3.   

        $ array_loc_ids = SELECT nearby_loc_id FROM NearbyLocations WHERE loc_id = $ loc_id;

        1. 然后再次在公司表中查询附近地点ID数组
        2.   

          $ companies = SELECT * FROM公司WHERE in($ array_loc_ids);

          在这个过程中,我多次点击表公司,位置表一次,并且条件无法点击附近的位置表..是否有任何SQL优化可以减少查询时间...这对我有用但是我认为是非常差的编码和方法来实现结果...任何好的建议来优化查询???

1 个答案:

答案 0 :(得分:0)

根据名称获取位置ID的前两个查询然后从公司表中获取具有该位置ID的公司可以合并如下 -

SELECT * FROM company join location on location.id = company.locationid 
where location.name = 'locationname';

我建议为整个过程创建mysql stored procedure。它肯定会提高整个过程的性能。