By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
create table link
(
id bigint not null primary key,
jsonvalue json not null
);
INSERT INTO link (id, jsonvalue)
WITH RECURSIVE
cte AS ( SELECt 1 num
UNION ALL
SELECT num + 1 FROM cte WHERE num < 100 )
SELECT num, JSON_ARRAY(JSON_OBJECT('fieldId', CAST(RAND() * 100 AS UNSIGNED), 'fieldValue', ROUND(RAND() * 1000)),
JSON_OBJECT('fieldId', CAST(RAND() * 100 AS UNSIGNED), 'fieldValue', ROUND(RAND() * 1000)))
FROM cte;
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue FROM link;
Records: 100 Duplicates: 0 Warnings: 0
id | jsonvalue |
---|---|
1 | [{"fieldId": 16, "fieldValue": 432.0}, {"fieldId": 69, "fieldValue": 153.0}] |
2 | [{"fieldId": 69, "fieldValue": 13.0}, {"fieldId": 98, "fieldValue": 875.0}] |
3 | [{"fieldId": 43, "fieldValue": 502.0}, {"fieldId": 24, "fieldValue": 673.0}] |
4 | [{"fieldId": 66, "fieldValue": 273.0}, {"fieldId": 39, "fieldValue": 124.0}] |
5 | [{"fieldId": 45, "fieldValue": 900.0}, {"fieldId": 14, "fieldValue": 992.0}] |
6 | [{"fieldId": 55, "fieldValue": 752.0}, {"fieldId": 12, "fieldValue": 352.0}] |
7 | [{"fieldId": 40, "fieldValue": 922.0}, {"fieldId": 42, "fieldValue": 356.0}] |
8 | [{"fieldId": 51, "fieldValue": 471.0}, {"fieldId": 83, "fieldValue": 745.0}] |
9 | [{"fieldId": 23, "fieldValue": 922.0}, {"fieldId": 92, "fieldValue": 811.0}] |
10 | [{"fieldId": 31, "fieldValue": 118.0}, {"fieldId": 66, "fieldValue": 942.0}] |
11 | [{"fieldId": 73, "fieldValue": 833.0}, {"fieldId": 97, "fieldValue": 349.0}] |
12 | [{"fieldId": 84, "fieldValue": 133.0}, {"fieldId": 16, "fieldValue": 391.0}] |
13 | [{"fieldId": 48, "fieldValue": 230.0}, {"fieldId": 71, "fieldValue": 842.0}] |
14 | [{"fieldId": 9, "fieldValue": 935.0}, {"fieldId": 40, "fieldValue": 190.0}] |
15 | [{"fieldId": 75, "fieldValue": 199.0}, {"fieldId": 73, "fieldValue": 61.0}] |
16 | [{"fieldId": 11, "fieldValue": 375.0}, {"fieldId": 54, "fieldValue": 573.0}] |
17 | [{"fieldId": 25, "fieldValue": 518.0}, {"fieldId": 85, "fieldValue": 677.0}] |
18 | [{"fieldId": 85, "fieldValue": 211.0}, {"fieldId": 51, "fieldValue": 908.0}] |
19 | [{"fieldId": 2, "fieldValue": 364.0}, {"fieldId": 77, "fieldValue": 740.0}] |
20 | [{"fieldId": 40, "fieldValue": 782.0}, {"fieldId": 71, "fieldValue": 202.0}] |
21 | [{"fieldId": 88, "fieldValue": 802.0}, {"fieldId": 36, "fieldValue": 416.0}] |
22 | [{"fieldId": 99, "fieldValue": 683.0}, {"fieldId": 46, "fieldValue": 231.0}] |
23 | [{"fieldId": 79, "fieldValue": 236.0}, {"fieldId": 82, "fieldValue": 411.0}] |
24 | [{"fieldId": 59, "fieldValue": 692.0}, {"fieldId": 70, "fieldValue": 443.0}] |
25 | [{"fieldId": 10, "fieldValue": 195.0}, {"fieldId": 66, "fieldValue": 710.0}] |
26 | [{"fieldId": 58, "fieldValue": 746.0}, {"fieldId": 0, "fieldValue": 773.0}] |
27 | [{"fieldId": 86, "fieldValue": 968.0}, {"fieldId": 27, "fieldValue": 433.0}] |
28 | [{"fieldId": 36, "fieldValue": 522.0}, {"fieldId": 52, "fieldValue": 16.0}] |
29 | [{"fieldId": 53, "fieldValue": 606.0}, {"fieldId": 44, "fieldValue": 374.0}] |
30 | [{"fieldId": 55, "fieldValue": 649.0}, {"fieldId": 58, "fieldValue": 958.0}] |
31 | [{"fieldId": 5, "fieldValue": 370.0}, {"fieldId": 71, "fieldValue": 414.0}] |
32 | [{"fieldId": 96, "fieldValue": 539.0}, {"fieldId": 83, "fieldValue": 520.0}] |
33 | [{"fieldId": 12, "fieldValue": 24.0}, {"fieldId": 77, "fieldValue": 768.0}] |
34 | [{"fieldId": 54, "fieldValue": 377.0}, {"fieldId": 28, "fieldValue": 250.0}] |
35 | [{"fieldId": 42, "fieldValue": 363.0}, {"fieldId": 55, "fieldValue": 651.0}] |
36 | [{"fieldId": 61, "fieldValue": 97.0}, {"fieldId": 65, "fieldValue": 979.0}] |
37 | [{"fieldId": 93, "fieldValue": 731.0}, {"fieldId": 85, "fieldValue": 69.0}] |
38 | [{"fieldId": 79, "fieldValue": 736.0}, {"fieldId": 32, "fieldValue": 372.0}] |
39 | [{"fieldId": 91, "fieldValue": 439.0}, {"fieldId": 46, "fieldValue": 990.0}] |
40 | [{"fieldId": 57, "fieldValue": 860.0}, {"fieldId": 60, "fieldValue": 428.0}] |
41 | [{"fieldId": 33, "fieldValue": 391.0}, {"fieldId": 95, "fieldValue": 583.0}] |
42 | [{"fieldId": 6, "fieldValue": 547.0}, {"fieldId": 56, "fieldValue": 149.0}] |
43 | [{"fieldId": 7, "fieldValue": 916.0}, {"fieldId": 36, "fieldValue": 59.0}] |
44 | [{"fieldId": 21, "fieldValue": 878.0}, {"fieldId": 76, "fieldValue": 152.0}] |
45 | [{"fieldId": 49, "fieldValue": 981.0}, {"fieldId": 44, "fieldValue": 265.0}] |
46 | [{"fieldId": 100, "fieldValue": 205.0}, {"fieldId": 2, "fieldValue": 510.0}] |
47 | [{"fieldId": 47, "fieldValue": 839.0}, {"fieldId": 77, "fieldValue": 358.0}] |
48 | [{"fieldId": 46, "fieldValue": 240.0}, {"fieldId": 81, "fieldValue": 344.0}] |
49 | [{"fieldId": 28, "fieldValue": 382.0}, {"fieldId": 6, "fieldValue": 153.0}] |
50 | [{"fieldId": 58, "fieldValue": 466.0}, {"fieldId": 57, "fieldValue": 472.0}] |
51 | [{"fieldId": 64, "fieldValue": 786.0}, {"fieldId": 1, "fieldValue": 683.0}] |
52 | [{"fieldId": 39, "fieldValue": 909.0}, {"fieldId": 37, "fieldValue": 125.0}] |
53 | [{"fieldId": 51, "fieldValue": 195.0}, {"fieldId": 43, "fieldValue": 571.0}] |
54 | [{"fieldId": 56, "fieldValue": 90.0}, {"fieldId": 77, "fieldValue": 571.0}] |
55 | [{"fieldId": 55, "fieldValue": 46.0}, {"fieldId": 58, "fieldValue": 740.0}] |
56 | [{"fieldId": 97, "fieldValue": 645.0}, {"fieldId": 31, "fieldValue": 597.0}] |
57 | [{"fieldId": 7, "fieldValue": 537.0}, {"fieldId": 49, "fieldValue": 832.0}] |
58 | [{"fieldId": 69, "fieldValue": 977.0}, {"fieldId": 80, "fieldValue": 74.0}] |
59 | [{"fieldId": 96, "fieldValue": 604.0}, {"fieldId": 12, "fieldValue": 805.0}] |
60 | [{"fieldId": 66, "fieldValue": 868.0}, {"fieldId": 37, "fieldValue": 237.0}] |
61 | [{"fieldId": 8, "fieldValue": 695.0}, {"fieldId": 23, "fieldValue": 71.0}] |
62 | [{"fieldId": 66, "fieldValue": 102.0}, {"fieldId": 52, "fieldValue": 292.0}] |
63 | [{"fieldId": 90, "fieldValue": 631.0}, {"fieldId": 45, "fieldValue": 354.0}] |
64 | [{"fieldId": 42, "fieldValue": 56.0}, {"fieldId": 1, "fieldValue": 880.0}] |
65 | [{"fieldId": 37, "fieldValue": 216.0}, {"fieldId": 97, "fieldValue": 183.0}] |
66 | [{"fieldId": 2, "fieldValue": 533.0}, {"fieldId": 62, "fieldValue": 478.0}] |
67 | [{"fieldId": 54, "fieldValue": 285.0}, {"fieldId": 79, "fieldValue": 114.0}] |
68 | [{"fieldId": 19, "fieldValue": 601.0}, {"fieldId": 44, "fieldValue": 384.0}] |
69 | [{"fieldId": 61, "fieldValue": 892.0}, {"fieldId": 63, "fieldValue": 496.0}] |
70 | [{"fieldId": 58, "fieldValue": 395.0}, {"fieldId": 24, "fieldValue": 31.0}] |
71 | [{"fieldId": 43, "fieldValue": 43.0}, {"fieldId": 93, "fieldValue": 539.0}] |
72 | [{"fieldId": 89, "fieldValue": 854.0}, {"fieldId": 59, "fieldValue": 374.0}] |
73 | [{"fieldId": 11, "fieldValue": 416.0}, {"fieldId": 76, "fieldValue": 546.0}] |
74 | [{"fieldId": 45, "fieldValue": 623.0}, {"fieldId": 76, "fieldValue": 931.0}] |
75 | [{"fieldId": 37, "fieldValue": 79.0}, {"fieldId": 27, "fieldValue": 118.0}] |
76 | [{"fieldId": 78, "fieldValue": 530.0}, {"fieldId": 32, "fieldValue": 14.0}] |
77 | [{"fieldId": 11, "fieldValue": 497.0}, {"fieldId": 16, "fieldValue": 314.0}] |
78 | [{"fieldId": 9, "fieldValue": 499.0}, {"fieldId": 23, "fieldValue": 652.0}] |
79 | [{"fieldId": 57, "fieldValue": 900.0}, {"fieldId": 78, "fieldValue": 224.0}] |
80 | [{"fieldId": 77, "fieldValue": 157.0}, {"fieldId": 49, "fieldValue": 970.0}] |
81 | [{"fieldId": 39, "fieldValue": 23.0}, {"fieldId": 96, "fieldValue": 711.0}] |
82 | [{"fieldId": 69, "fieldValue": 298.0}, {"fieldId": 43, "fieldValue": 269.0}] |
83 | [{"fieldId": 5, "fieldValue": 435.0}, {"fieldId": 3, "fieldValue": 832.0}] |
84 | [{"fieldId": 8, "fieldValue": 897.0}, {"fieldId": 25, "fieldValue": 548.0}] |
85 | [{"fieldId": 100, "fieldValue": 349.0}, {"fieldId": 75, "fieldValue": 694.0}] |
86 | [{"fieldId": 22, "fieldValue": 40.0}, {"fieldId": 53, "fieldValue": 511.0}] |
87 | [{"fieldId": 98, "fieldValue": 361.0}, {"fieldId": 87, "fieldValue": 257.0}] |
88 | [{"fieldId": 68, "fieldValue": 638.0}, {"fieldId": 14, "fieldValue": 809.0}] |
89 | [{"fieldId": 61, "fieldValue": 631.0}, {"fieldId": 32, "fieldValue": 703.0}] |
90 | [{"fieldId": 56, "fieldValue": 673.0}, {"fieldId": 70, "fieldValue": 465.0}] |
91 | [{"fieldId": 23, "fieldValue": 779.0}, {"fieldId": 19, "fieldValue": 610.0}] |
92 | [{"fieldId": 48, "fieldValue": 582.0}, {"fieldId": 46, "fieldValue": 573.0}] |
93 | [{"fieldId": 47, "fieldValue": 644.0}, {"fieldId": 80, "fieldValue": 86.0}] |
94 | [{"fieldId": 2, "fieldValue": 841.0}, {"fieldId": 14, "fieldValue": 201.0}] |
95 | [{"fieldId": 57, "fieldValue": 258.0}, {"fieldId": 57, "fieldValue": 97.0}] |
96 | [{"fieldId": 76, "fieldValue": 526.0}, {"fieldId": 34, "fieldValue": 108.0}] |
97 | [{"fieldId": 53, "fieldValue": 323.0}, {"fieldId": 3, "fieldValue": 160.0}] |
98 | [{"fieldId": 72, "fieldValue": 137.0}, {"fieldId": 52, "fieldValue": 168.0}] |
99 | [{"fieldId": 29, "fieldValue": 947.0}, {"fieldId": 87, "fieldValue": 490.0}] |
100 | [{"fieldId": 85, "fieldValue": 794.0}, {"fieldId": 41, "fieldValue": 666.0}] |
ALTER TABLE link ADD INDEX IDX_LEFT_FIELD ((CAST(`jsonvalue`->'$[*].fieldId' AS unsigned ARRAY)));
Records: 0 Duplicates: 0 Warnings: 0
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE 10 MEMBER OF (`jsonvalue`->'$[*].fieldId');
id | jsonvalue |
---|---|
25 | [{"fieldId": 10, "fieldValue": 195.0}, {"fieldId": 66, "fieldValue": 710.0}] |
EXPLAIN
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE 10 MEMBER OF (`jsonvalue`->'$[*].fieldId');
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | link | null | ref | IDX_LEFT_FIELD | IDX_LEFT_FIELD | 9 | const | 1 | 100.00 | Using where |
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE JSON_CONTAINS(`jsonvalue`->'$[*].fieldId', CAST('[10]' AS JSON));
id | jsonvalue |
---|---|
25 | [{"fieldId": 10, "fieldValue": 195.0}, {"fieldId": 66, "fieldValue": 710.0}] |
EXPLAIN
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE JSON_CONTAINS(`jsonvalue`->'$[*].fieldId', CAST('[10]' AS JSON));
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | link | null | range | IDX_LEFT_FIELD | IDX_LEFT_FIELD | 9 | null | 1 | 100.00 | Using where |
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE JSON_OVERLAPS(`jsonvalue`->'$[*].fieldId', CAST('[10]' AS JSON));
id | jsonvalue |
---|---|
25 | [{"fieldId": 10, "fieldValue": 195.0}, {"fieldId": 66, "fieldValue": 710.0}] |
EXPLAIN
SELECT id, CAST(jsonvalue AS CHAR) jsonvalue
FROM link
WHERE JSON_OVERLAPS(`jsonvalue`->'$[*].fieldId', CAST('[10, 20, 30]' AS JSON));
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | SIMPLE | link | null | range | IDX_LEFT_FIELD | IDX_LEFT_FIELD | 9 | null | 3 | 100.00 | Using where |