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开发世界里,从来没有像业余时间这样的事情谢谢你