Sqlite 根据文件哈希频率和文件大小对文件进行排序的更好的查询策略
我写这个查询时没有太多考虑,但作为一个初学者,我几乎可以肯定它可以写得更好 这是:Sqlite 根据文件哈希频率和文件大小对文件进行排序的更好的查询策略,sqlite,query-optimization,Sqlite,Query Optimization,我写这个查询时没有太多考虑,但作为一个初学者,我几乎可以肯定它可以写得更好 这是: SELECT filehash, filename, filesize, group_files FROM files INNER JOIN ( SELECT filehash group_id, COUNT(filehash) group_files FROM files GROUP BY f
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)
索引定义:
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
如果我错了,你能纠正我吗?提前谢谢你。没有。对我来说很合适
我认为您不需要此查询的文件名索引。在一些计划中,文件大小索引会有所帮助,但MySQL没有为此使用它们。您最好将两个单独的索引替换为上的复合索引(filehash,filesize)。或者你可能不会 没有。对我来说很合适
我认为您不需要此查询的文件名索引。在一些计划中,文件大小索引会有所帮助,但MySQL没有为此使用它们。您最好将两个单独的索引替换为上的复合索引(filehash,filesize)。或者你可能不会 你觉得这个版本怎么样
select filehash, group_concat(filename), filesize, count(*) as group_files
from files
group by filehash
order by group_files desc
看起来这可能会跑得更快。它能满足您的需要吗?您觉得这个版本怎么样
select filehash, group_concat(filename), filesize, count(*) as group_files
from files
group by filehash
order by group_files desc
看起来这可能会跑得更快。它能满足您的需要吗?我不知道SQLite也支持
group\u concat
功能。很高兴知道!我会试试这个,然后回来说它是否更好。谢谢!:)很抱歉错过了这个。。。该查询明显缩短了搜索时间,现在比以前快了96%!再次感谢你!:)我不知道SQLite还支持group\u concat
函数。很高兴知道!我会试试这个,然后回来说它是否更好。谢谢!:)很抱歉错过了这个。。。该查询明显缩短了搜索时间,现在比以前快了96%!再次感谢你!:)