Я написал этот запрос, не задумываясь, но как новичок, я почти уверен, что он мог бы быть написан лучше.
Вот он:
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
Не могли бы вы исправить меня, если я ошибаюсь?Заранее спасибо.