1
我已經寫了這個查詢沒有太多想法,但作爲一個初學者,我幾乎肯定它可以寫得更好。更好的查詢策略,通過文件哈希頻率和文件大小對文件進行排序
這就是:
SELECT filehash, filename, filesize, group_files
FROM files
INNER JOIN ( SELECT filehash group_id,
COUNT(filehash) group_files
FROM files
GROUP BY filehash) groups
ON files.filehash = groups.group_id
ORDER BY group_files DESC,
filesize DESC
表定義:
CREATE TABLE files (fileid INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT,
filesize INTEGER,
filehash TEXT)
指標定義:
CREATE INDEX files_filehash_idx
ON files(filehash)
CREATE UNIQUE INDEX files_filename_idx
ON files(filename)
CREATE INDEX files_filesize_idx
ON files(filesize)
查詢說明查詢計劃:
selectid order from detail
1 0 0 SCAN TABLE files USING COVERING INDEX files_filehash_idx (~1000000 rows)
0 0 1 SCAN SUBQUERY 1 AS groups (~100 rows)
0 1 0 SEARCH TABLE files USING INDEX files_filehash_idx (filehash=?) (~10 rows)
0 0 0 USE TEMP B-TREE FOR ORDER BY
如果我錯了,你能糾正我嗎?先謝謝你。
我不知道SQLite也支持'group_concat'函數。很高興知道!我會試試這個,然後回來說它是否工作得更好。謝謝! :) – 2011-03-20 00:30:29
它工作更好嗎? – 2011-04-10 06:10:34
對不起,錯過了這個...這個查詢明顯改善了搜索時間,現在比以前快了96%!再次感謝你! :) – 2012-07-27 17:33:59