title: SQLite query optimization
body: <p>I'm using this query to fetch places near user.</p>
  
  <pre><code>query = [NSString stringWithFormat:@"SELECT place_index, place_name,  place_category, place_address, place_phone, place_mobile, place_description, place_email, place_website, place_facebookId, place_neighborhood, place_rating, place_lat, place_long, place_is_closed, product_name, distance(place_lat, place_long, '%f', '%f') AS dist FROM (SELECT places.id as place_index, places.name as place_name, places.category as place_category, places.address as place_address, places.phone as place_phone, places.mobile as place_mobile, places.description as place_description, places.email as place_email, places.website as place_website, places.facebookId as place_facebookId, places.neighborhood as place_neighborhood, places.rating as place_rating, places.lat as place_lat, places.long as place_long, places.is_closed as place_is_closed, products.name as product_name FROM places LEFT JOIN products ON products.place_id = places.id UNION SELECT places.id as place_index, places.name as place_name,  places.category as place_category, places.address as place_address, places.phone as place_phone, places.mobile as place_mobile, places.description as place_description, places.email as place_email, places.website as place_website, places.facebookId as place_facebookId, places.neighborhood as place_neighborhood, places.rating as place_rating, places.lat as place_lat, places.long as place_long, places.is_closed as place_is_closed, added_products.name as added_product_name FROM places LEFT JOIN added_products ON added_products.place_id = places.id) WHERE place_is_closed = 0 ", userLocation.coordinate.latitude, userLocation.coordinate.longitude];
  </code></pre>
  
  <p>Basically I have Select from a Union of Selects with LEFT joins. This query is used in the search mechanism, so it triggers off each time user inputs something into a <code>UITextField</code>. It takes an impossibru 1 second to execute and fetch objects, is there a way to optimize it somehow?</p>
  
  <p>-- EDIT</p>
  
  <p>This is the query's text as requested, the formatting parameters are listed above, but I don't think they're an issue:</p>
  
  <pre><code>SELECT place_index, 
         place_name, 
         place_category, 
         place_address, 
         place_phone, 
         place_mobile, 
         place_description, 
         place_email, 
         place_website, 
         place_facebookid, 
         place_neighborhood, 
         place_rating, 
         place_lat, 
         place_long, 
         place_is_closed, 
         product_name, 
         Distance(place_lat, place_long, '%f', '%f') AS dist 
  FROM   (SELECT places.id           AS place_index, 
                 places.name         AS place_name, 
                 places.category     AS place_category, 
                 places.address      AS place_address, 
                 places.phone        AS place_phone, 
                 places.mobile       AS place_mobile, 
                 places.DESCRIPTION  AS place_description, 
                 places.email        AS place_email, 
                 places.website      AS place_website, 
                 places.facebookid   AS place_facebookid, 
                 places.neighborhood AS place_neighborhood, 
                 places.rating       AS place_rating, 
                 places.lat          AS place_lat, 
                 places.long         AS place_long, 
                 places.is_closed    AS place_is_closed, 
                 products.name       AS product_name 
          FROM   places 
                 LEFT JOIN products 
                   ON products.place_id = places.id 
          UNION 
          SELECT places.id           AS place_index, 
                 places.name         AS place_name, 
                 places.category     AS place_category, 
                 places.address      AS place_address, 
                 places.phone        AS place_phone, 
                 places.mobile       AS place_mobile, 
                 places.DESCRIPTION  AS place_description, 
                 places.email        AS place_email, 
                 places.website      AS place_website, 
                 places.facebookid   AS place_facebookid, 
                 places.neighborhood AS place_neighborhood, 
                 places.rating       AS place_rating, 
                 places.lat          AS place_lat, 
                 places.long         AS place_long, 
                 places.is_closed    AS place_is_closed, 
                 added_products.name AS added_product_name 
          FROM   places 
                 LEFT JOIN added_products 
                   ON added_products.place_id = places.id) 
  WHERE  place_is_closed = 0 
  </code></pre>