使用Sqlite3优化以下查询的任何想法?
SELECT * FROM Feed
WHERE ActivityType IN ('PhotoActivity','CommentActivity')
AND UserKey NOT IN ('testUser', 'testUser2')
ORDER BY TimeStamp DESC
LIMIT 20 OFFSET 0;
该表永远不会有超过100,000条记录,我们希望写入100到1次。
非常感谢任何帮助。
表Sql是:
CREATE TABLE Feed (
FeedActivityKey TEXT PRIMARY KEY,
UserKey TEXT,
AssemblyQualifiedName TEXT,
SerializedObject BLOB,
ActivityType TEXT,
CorrelatedKey TEXT,
TimeStamp INTEGER);
CREATE INDEX Feed_ActivityTypeUserKey ON [FriendFeed] (
[ActivityType], [UserKey] DESC);
CREATE INDEX Feed_UserKey ON [FriendFeed] (
[UserKey] DESC);
CREATE INDEX Feed_TimeStamp ON [FriendFeed] (
[TimeStamp] DESC);
解释输出是:
0跟踪0 0 0 0
1 OpenEphemeral 1 3 0 keyinfo(1,-BINARY)0
2整数20 1 0 0
3 MustBeInt 1 0 0 0
4 IfZero 1 73 0 0
5整数0 2 0 0
6 MustBeInt 2 0 0 0
7 IfPos 2 9 0 0
8整数0 2 0 0
9添加1 2 3 0
10 IfPos 1 12 0 0
11整数-1 3 0 0
12 String8 0 4 0 PhotoActivity 0
13 String8 0 5 0 CommentActivity 0
14转到0 74 0 0
15 OpenRead 0 2 0 7 0
16 OpenRead 2 4 0 keyinfo(2,BINARY,BINARY)0
17如果7 25 0 0
18整数1 7 0 0
19 OpenEphemeral 4 1 0 keyinfo(1,BINARY)0
20 Null 0 9 0 0
21 MakeRecord 4 1 9 a 0
22 IdxInsert 4 9 0 0
23 MakeRecord 5 1 9 a 0
24 IdxInsert 4 9 0 0
25倒带4 53 0 0
26栏4 0 6 0
27 IsNull 6 52 0 0
28亲和力6 1 0 aab 0
29 SeekGe 2 52 6 1 0
30 IdxGE 2 52 6 1 1
31 IdxRowid 2 9 0 0
32寻求0 9 0 0
33列0 0 10 0
34栏2 1 11 0
35列0 2 12 0
36栏0 3 13 0
37栏2 0 14 0
38栏0 5 15 0
39栏0 6 16 0
40 MakeRecord 10 7 9 0
41栏0 6 17 0
42序列1 18 0 0
43移动9 19 1 0
44 MakeRecord 17 3 8 0
45 IdxInsert 1 8 0 0
46 IfZero 3 49 0 0
47 AddImm 3 -1 0 0
48转到0 51 0 0
49最后1 0 0 0
50删除1 0 0 0
51下一个2 30 0 0
52下一页4 26 0 0
53关闭0 0 0 0
54关闭2 0 0 0
55 OpenPseudo 5 1 7 0
56排序1 72 0 0
57 AddImm 2 -1 0 0
58 IfNeg 2 60 0 0
59转到0 71 0 0
60栏1 2 9 0
61整数1 8 0 0
62插入5 9 8 0
63栏5 0 10 0
64栏5 1 11 0
65栏5 2 12 0
66栏5 3 13 0
67栏5 4 14 0
68栏5 5 15 0
69栏5 6 16 0
70 ResultRow 10 7 0 0
71下一页1 57 0 0
72关闭5 0 0 0
73 Halt 0 0 0 0
74交易0 0 0 0
75 VerifyCookie 0 5 0 0
76 TableLock 0 2 0 FriendFeed 0
77转到0 15 0 0
答案 0 :(得分:1)
ActivityType
,UserKey
。SHARED
锁(如果必须,写进程可以再等一会儿)答案 1 :(得分:0)
我会移除select * from
并将其更改为select [column1], [column2] from
这样做的原因是你只返回你需要的值(IE:我看你的表有6列,但你的结果只返回5列。),它减少了开销,因为你不使用一张通配符。
答案 2 :(得分:0)