Ayant des problèmes d'indexation et d'exécution d'une requête en O (log n)
temps.
La requête comprend un INNER JOIN
, Un ORDER BY
Et une opération d'égalité. Si je comprends correctement les lois des bases de données, une requête peut être indexée et exécutée dans O (log n)
Time (ou à peu près) si un opérateur de non-égalité n'est pas utilisé sur plus d'une colonne. Dans ce cas, je crois que le INNER JOIN
Compte comme un opérateur d'égalité et l'opérateur de non-égalité serait la partie ORDER BY
De la requête. Cette table présente plus de 10 000 000 rangées et doit gérer plusieurs lectures et écrit par seconde.
En utilisant PostgreSQL. C'est ce que ressemble au tableau. Comme vous pouvez le constater, la colonne 'Noms' est une propriété de liste et c'est la colonne que le INNER JOIN
Est contre:
Age Names Date
34 ['carla', 'john', 'sam'] 3/13/2011
26 ['json', 'cindy', 'joel'] 3/13/2011
72 ['beth', 'amber', 'susie'] 3/13/2011
14 ['john', 'jim', 'debie'] 3/13/2011
C'est la requête que nous essayons de faire:
SELECT * FROM the_table WHERE Age==26 AND Names=='john' ORDER BY Date
Mon origine provient de l'utilisation de la grande table d'App moteur, de sorte que j'ai utilisé des opérateurs d'égalité pour indiquer que 'john'
Doit être l'un des noms de la colonne Names
. Ce serait une requête acceptable dans la grande table de Gae, elle exécuterait dans O (log N)
Time car toutes les grosses requêtes de table sont requises à faire. Je suppose qu'il existe un moyen de faire cela dans PostgreSQL aussi bien que PostgreSQL accepte les types de données de liste comme des colonnes.
Est-ce que cela est possible de faire à PostgreSQL?
Si tel est le cas, comment l'indice devrait-il être configuré (nous ne pouvons pas comprendre comment configurer un index qui prend en compte les trois propriétés)?
Avez-vous essayé avec:
SELECT * from the_table WHERE Age = 26 AND array['john'] && Names ORDER BY Date
Utiliser un index comme:
CREATE INDEX the_table_idx ON the_table USING GIN (Names, Age, Date);
Ou au moins un index comme
CREATE INDEX the_table_idx ON the_table USING GIN (Names, Age);