Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone SQLite查询优化_Iphone_Objective C_Ios_Sqlite - Fatal编程技术网

Iphone SQLite查询优化

Iphone SQLite查询优化,iphone,objective-c,ios,sqlite,Iphone,Objective C,Ios,Sqlite,我正在使用此查询获取用户附近的位置 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

我正在使用此查询获取用户附近的位置

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 

使子查询仅返回places表的identity列,并在identity列的顶部向表添加一个新联接。这将使子查询计算更轻松。

您介意将查询格式化为我们可以实际读取它的方式吗?谢谢,这将速度不时地从0.7-1.1秒提高到0.3-0.06秒。你还有其他有用的建议吗?我也经常使用LIKE compare,这对性能也有影响吗?@Eugene,这取决于查询。“喜欢”本身并不是邪恶的,我们应该看看。我的小贴士是读几本关于SQL的书,它们比几条小贴士更能让人理解。有时间读书真是太好了,但是,唉,在iOS开发世界里,从来没有像业余时间这样的事情谢谢你