Índice para localizar um elemento em uma matriz JSON

Eu tenho uma tabela que se parece com isso:

CREATE TABLE tracks (id SERIAL, artists JSON);

INSERT INTO tracks (id, artists) 
  VALUES (1, '[{"name": "blink-182"}]');

INSERT INTO tracks (id, artists) 
  VALUES (2, '[{"name": "The Dirty Heads"}, {"name": "Louis Richards"}]');

Existem várias outras colunas que não são relevantes para esta pergunta. Há uma razão para armazená-los como JSON.

O que estou tentando fazer é procurar uma faixa que tenha umnome do artista (Combinação exata).

Estou usando esta consulta:

SELECT * FROM tracks 
  WHERE 'ARTIST NAME' IN
    (SELECT value->>'name' FROM json_array_elements(artists))

por exemplo

SELECT * FROM tracks
  WHERE 'The Dirty Heads' IN 
    (SELECT value->>'name' FROM json_array_elements(artists))

No entanto, isso faz uma verificação completa da tabela e não é muito rápido. Eu tentei criar um índice GIN usando uma funçãonames_as_array(artists)e usado'ARTIST NAME' = ANY names_as_array(artists), no entanto, o índice não é usado e a consulta é realmente significativamente mais lenta.

questionAnswers(1)

yourAnswerToTheQuestion