(1)SQLite语句当中排序和limit条数限制是这样:
SELECT title FROM %s ORDER BY date DESC LIMIT %d COLLATE NOCASE
(2)SQLite搜索时不要忘记对各种转义字符的处理:处理不当,不仅仅是结果出错的问题,更有可能出现查询时崩溃,或者查询不能停止的问题。比如’符号,不处理就导致崩溃,再比如%,如果查询语句当中有很多%,而你又使用了LIKE语句,那么%会被认为是LIKE的匹配符,这时候数据库查询策略也就不得而知了,一般会导致半天出不来结果
/ -> //
' -> ''
[ -> /[
] -> /]
% -> /%
& -> /&
_ -> /_
( -> /(
) -> /)
LIKE语句中不要忘了escape ‘/’,同时要记住
(重要)如果存在多个LIKE用and、or连接的,那么需要写多个escape
如:
select * from table where str like '%baidu.com?wd=/%abc%' escape '/' or str like '%baidu.com?wd=/%abc%' escape '/'
需要指出的是,这种写法也会忽略前面原有的’/’,影响结果的正确性
(3)遇到查询的效率问题,有两个方案可以参考:
建立索引:
CREATE INDEX IF NOT EXISTS myIndex ON table(column)
数据分表:比如按时间分表,每个月一张,或者首字母分表等
优先推荐索引,成本低,见效非常明显
(4)sqllite中支持replace或者update、insert语句中有查询语句,但是子语句必须用括号括起来,如
REPLACE INTO favicon_map(icon_id, url, icon_type, last_modified, etag, last_updated, path) VALUES((SELECT icon_id FROM favicon_map WHERE url = 'http://www.baidu.com'), 'http://www.baidu.com', 1, 'abc', 'abc', 1448937950, 'xyz');