J'ai besoin d'attacher des attributs illimités à un enregistrement dans une table, et j'ai déjà conçu un système en utilisant # 3 ci-dessous en utilisant mysql. Malheureusement, je constate que la recherche sur un million d'enregistrements devient lente. La deuxième approche est-elle meilleure, ou existe-t-il une meilleure façon de procéder? Est-ce un cas d'utilisation d'une vue? J'aimerais que ma table de touches soit séparée afin que je sache quels attributs sont stockés pour chaque enregistrement.Quelle est la meilleure façon de concevoir des paires clé-valeur dynamiques dans mysql?
1: simple:
table records: id, recordname, valname
select recordname from records where valname = 'myvalue'
2: un peu plus complexe:
table records: id recordname
table keyvalues: id recordid keyname valname
select r.recordname
from records r
right join keyvalues kv on kv.recordid = r.id
and kv.keyname='mykey'
and kv.valname = 'myvalue'
3: le plus complexe:
table records: id recordname
table keys: id keyname
table values: id recordid keyid valname
select r.recordname
from records r
right join keys k on k.keyname='mykey'
right join values v on v.recordid = r.id
and v.keyid = k.id
and v.valname = 'myvalue'
Dites-vous que la requête sur 3 devient lente? – Hogan
oui, il semble 3 devient lent. – invent