This commit is contained in:
Deluan Quintão 2026-10-08 01:45:42 +08:00 • committed by GitHub
commit 2eb24ca3ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 63 additions and 0 deletions

View file

@ -0,0 +1,23 @@
-- +goose Up
-- COLLATE NOCASE covering indexes for the LIKE-based search fallback (CJK and
-- punctuation-only queries route to it; see persistence/sql_search_like.go
-- likeSearchColumns). Without these, a CJK search3 is a full scan of the wide
-- media_file table across 4 columns (~4s on 1M songs); with them SQLite scans the
-- narrow per-column indexes instead (~0.3s). Columns MUST match likeSearchColumns.
-- A plain LIKE uses these because Navidrome runs with case_sensitive_like = OFF.
CREATE INDEX IF NOT EXISTS idx_media_file_title_nocase ON media_file (title COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_media_file_album_nocase ON media_file (album COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_media_file_artist_nocase ON media_file (artist COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_media_file_album_artist_nocase ON media_file (album_artist COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_album_name_nocase ON album (name COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_album_album_artist_nocase ON album (album_artist COLLATE NOCASE);
CREATE INDEX IF NOT EXISTS idx_artist_name_nocase ON artist (name COLLATE NOCASE);
-- +goose Down
DROP INDEX IF EXISTS idx_media_file_title_nocase;
DROP INDEX IF EXISTS idx_media_file_album_nocase;
DROP INDEX IF EXISTS idx_media_file_artist_nocase;
DROP INDEX IF EXISTS idx_media_file_album_artist_nocase;
DROP INDEX IF EXISTS idx_album_name_nocase;
DROP INDEX IF EXISTS idx_album_album_artist_nocase;
DROP INDEX IF EXISTS idx_artist_name_nocase;