MySQL select podle json BLOBu
Mám MySQL DB. V ní je tabulka subuser, která jako poslední sloupec obsahuje BLOB data, ve kterém jsou data v json formátu, např.:
{"data":"{\"username\":\"LE056168\",\"firstname\":\"Lenka\",\"lastname\":\"Hor\\u00e1\\u010dkov\\u00e1\",\"group\":2,\"segment\":3,\"admin\":\"0\"}","name":"Lenka Hor\u00e1\u010dkov\u00e1","email":"xyz@seznam.cz","subuser_id":"4450","admin":"0"}
A já potřebuju selektovat záznamy podle group_id, např. všechny, které budou mít group_id = 1.
Našla jsem tohle:
SELECT *
FROM cps_subuser
WHERE data
REGEXP "^{.*\"group_id\":0,.*}$"
ale bohužel při daném rozsahu DB (cca 4 000 záznamů, nové stále přibývají), je to nepoužitelně pomalé, zvláště, když je to součástí joinu ještě několika dalších tabulek, které mají také řádově tisíce záznamů[/code]
Je nějaký jiný efektivnější způsob jak se k datům dostat? Když přijdu s nápadem data extrahovat do samostatných sloupečků, tak se mnou šéf vyrazí dveře, protože on je na tento způsob ukládání dat moc pyšný. Vysvětloval mi, že to tak prý je z bezpečnostních důvodů.
Tak ať ty data rovnou zahazuje, to bude rychlejší a bezpečnější. A dostupnost dat bude prakticky stejná.
O té bezpečnosti si myslím svoje, dělala jsem mj. OKpráci (to je ten soft, co ho všichni chtěli začátkem roku zpět) a soft pro mezibankovní platební styk, tam se zcela nepochybně na bezpečnost dat kladl velký důraz, ale data do db v json formátu nikoho zapisovat nenapadlo ani omylem.
Ono je to stejné, jako by šéf železářství prohlísil, že kvůli zlodějům se všechny šroubky a matičky sesypou do jedné velké bedny a na noc se budou zamykat.
Ale nezajímá ho, že když příjde zákazník, tak prodavač stráví 2 hodiny přebíráním bedny, aby mu našel požadované 3 šroubky. Kdyby to bylo rozdělené v krabičkách jako předtím, stačil by obsloučit 20 dalších a zisk prodejny by byl mnohem vyšší.