Оптимизация запросов SQLite - PullRequest
0 голосов
/ 16 января 2012

Я использую этот запрос для поиска мест рядом с пользователем.

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];

По сути, у меня есть выбор из объединения избранных с левыми соединениями. Этот запрос используется в механизме поиска, поэтому он срабатывает каждый раз, когда пользователь вводит что-то в UITextField. На выполнение и извлечение объектов уходит 1 секунда, есть ли способ как-то его оптимизировать?

- РЕДАКТИРОВАТЬ

Это текст запроса, параметры форматирования перечислены выше, но я не думаю, что это проблема:

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 

1 Ответ

0 голосов
/ 16 января 2012

заставляет подзапрос возвращать единственный столбец идентификаторов для таблицы places и добавлять новый JOIN в таблицу вверху столбца идентификаторов. Это должно облегчить вычисление подзапроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...