Autor | Zpráva | ||
---|---|---|---|
Kcko Profil |
Mám 3 tabulky
a dotaz složený v Nette (NDTB) Dlouhý je jen díky Idčkům .... Vyhazuje mi dosti zvláštní chybu Duplicate entry '10071' for key 'group_key' Přiznám se, že jsem z toho na větvi. Pokud umažu většinu těch IDček tak to funguje. Samostatný explain je rychlý. Napadně někoho jak to přepsat (klidně ručně). Kajman? SELECT `eshop_item_variant`.*, SUM(`eshop_item_variant_warehouse`.`amount`) AS `amount1` FROM `eshop_item_variant` INNER JOIN `eshop_item_variant_warehouse` ON `eshop_item_variant`.`id` = `eshop_item_variant_warehouse`.`eshop_item_variant_id` INNER JOIN `warehouse` ON `eshop_item_variant_warehouse`.`warehouse_id` = `warehouse`.`id` WHERE (`warehouse`.`supplier_id` = `eshop_item_variant`.`supplier_id`) AND (`navigation_id` IN (715, 714, 713, 593, 712, 1201, 711, 586, 1200, 584, 865, 641, 700, 859, 833, 858, 832, 640, 699, 847, 864, 831, 1199, 698, 639, 863, 846, 857, 1021, 836, 830, 1196, 638, 583, 697, 845, 627, 856, 850, 716, 731, 862, 1036, 1020, 829, 835, 1035, 849, 844, 855, 861, 1195, 1190, 626, 730, 637, 582, 696, 585, 710, 1209, 108, 393, 779, 809, 799, 789, 741, 749, 788, 107, 798, 838, 778, 808, 405, 740, 1046, 777, 1010, 659, 797, 837, 748, 807, 404, 787, 106, 658, 747, 796, 241, 353, 806, 786, 105, 646, 1048, 739, 722, 1024, 776, 828, 657, 1117, 775, 631, 618, 738, 683, 721, 834, 104, 1157, 746, 1023, 785, 805, 352, 915, 689, 795, 1045, 645, 79, 11, 469, 827, 682, 737, 942, 720, 774, 851, 1116, 630, 877, 656, 794, 351, 914, 13, 78, 688, 1156, 1047, 784, 644, 621, 103, 804, 1022, 745, 629, 736, 643, 468, 687, 941, 876, 783, 843, 744, 483, 655, 955, 619, 681, 1034, 793, 826, 636, 102, 390, 1115, 719, 12, 803, 913, 1019, 733, 564, 453, 350, 1155, 773, 628, 661, 940, 802, 581, 1033, 1208, 622, 426, 463, 476, 792, 207, 1198, 485, 56, 933, 743, 686, 912, 635, 701, 538, 642, 772, 349, 782, 558, 882, 1029, 1267, 1114, 767, 885, 763, 879, 854, 992, 848, 653, 718, 735, 825, 680, 563, 924, 1154, 1018, 760, 101, 321, 732, 801, 911, 860, 1189, 884, 1191, 791, 224, 1265, 55, 881, 878, 10034, 346, 695, 226, 842, 344, 425, 1032, 980, 824, 990, 951, 1017, 939, 766, 937, 100, 1205, 1041, 956, 530, 742, 709, 482, 685, 1028, 679, 781, 1217, 1049, 1051, 1197, 1243, 771, 206, 1177, 979, 595, 1216, 734, 580, 1229, 562, 647, 557, 1230, 762, 927, 759, 991, 617, 948, 729, 1166, 1113, 949, 947, 660, 634, 633, 652, 573, 932, 625, 623, 387, 348, 693, 378, 389, 388, 376, 692, 624, 243, 386, 691, 632, 17, 690, 294, 242, 1147, 77, 76, 399, 607, 651, 293, 36, 19, 1146, 728, 184, 38, 282, 183, 717, 403, 176, 398, 495, 1145, 526, 75, 606, 231, 205, 195, 292, 230, 291, 15, 515, 99, 677, 397, 823, 903, 494, 182, 92, 503, 1144, 605, 37, 649, 83, 74, 650, 95, 197, 331, 16, 648, 1143, 154, 396, 10041, 1227, 338, 815, 654, 902, 707, 91, 290, 288, 1043, 82, 330, 40, 98, 229, 514, 1100, 94, 493, 181, 614, 676, 502, 670, 268, 73, 524, 668, 10044, 228, 153, 965, 337, 18, 276, 492, 1099, 1203, 883, 80, 159, 612, 694, 1009, 1226, 754, 1142, 138, 267, 727, 97, 1119, 501, 287, 1039, 1211, 39, 971, 379, 706, 841, 675, 281, 901, 513, 289, 561, 180, 204, 1060, 811, 266, 10039, 1165, 227, 275, 481, 320, 272, 35, 1118, 705, 757, 726, 874, 819, 684, 137, 546, 512, 311, 343, 769, 1059, 800, 203, 900, 616, 470, 1098, 674, 853, 500, 504, 286, 1040, 970, 603, 1141, 280, 179, 336, 1013, 753, 152, 964, 871, 1210, 142, 1003, 667, 1202, 1008, 1225, 460, 1171, 491, 158, 611, 14, 1164, 1007, 790, 1170, 1002, 358, 818, 1207, 279, 756, 1025, 10040, 752, 768, 285, 945, 459, 202, 1097, 490, 413, 613, 969, 673, 704, 497, 905, 1042, 602, 1050, 1140, 1194, 190, 265, 225, 678, 511, 271, 520, 525, 531, 666, 987, 1011, 54, 908, 963, 479, 370, 366, 545, 394, 1105, 875, 1261, 318, 121, 475, 127, 1158, 725, 362, 1112, 130, 136, 572, 899, 335, 1057, 375, 1058, 938, 1126, 1224, 869, 141, 151, 157, 440, 428, 923, 917, 1241, 708, 672, 968, 962, 262, 986, 270, 264, 1006, 1001, 703, 724, 1239, 761, 448, 984, 443, 1223, 474, 273, 1206, 278, 341, 334, 1031, 480, 1179, 1056, 484, 817, 868, 223, 53, 1193, 610, 510, 518, 189, 665, 1178, 579, 1186, 201, 898, 892, 156, 150, 935, 315, 1096, 601, 499, 909, 381, 196, 412, 369, 365, 361, 532, 1130, 944, 1150, 1125, 1139, 357, 1169, 590, 575, 1260, 1219, 1104, 544, 1160, 1153, 1111, 140, 907, 10043, 119, 135, 120, 755, 129, 839, 1038, 126, 765, 751, 880, 780, 1259, 407, 128, 556, 194, 591, 509, 222, 758, 1110, 1218, 1103, 125, 589, 560, 1012, 1176, 993, 249, 517, 1014, 1102, 994, 664, 671, 380, 467, 822, 118, 188, 1228, 723, 458, 1162, 985, 277, 1271, 750, 959, 961, 967, 34, 1129, 28, 1124, 916, 931, 918, 816, 1204, 1149, 10046, 1249, 372, 10042, 274, 1168, 565, 1159, 702, 10009, 1167, 910, 1005, 356, 1264, 368, 411, 1037, 364, 10045, 360, 1000, 543, 10047, 478, 897, 10036, 10035, 1044, 333, 340, 139, 1242, 200, 1095, 1222, 498, 943, 473, 1252, 1030, 770, 462, 934, 149, 1250, 438, 465, 247, 1185, 1240, 52, 852, 345, 1188, 1192, 870, 260, 50, 442, 891, 1272, 615, 134, 888, 155, 574, 457, 342, 540, 1221, 550, 1152, 339, 547, 764, 548, 332, 559, 813, 477, 245, 555, 10023, 449, 1187, 814, 445, 1136, 1122, 10, 471, 10022, 218, 821, 549, 244, 284, 1251, 896, 269, 570, 240, 217, 820, 60, 1248, 401, 972, 599, 596, 535, 27, 9, 472, 84, 1127, 1232, 567, 1138, 305, 895, 246, 59, 598, 239, 928, 810, 371, 8, 926, 307, 402, 461, 304, 238, 1151, 71, 1134, 410, 431, 26, 894, 58, 1086, 571, 906, 214, 597, 303, 237, 569, 57, 221, 306, 215, 25, 976, 7, 446, 594, 1067, 385, 317, 893, 400, 1135, 1094, 367, 523, 966, 576, 1085, 998, 213, 533, 1084, 329, 1263, 169, 554, 522, 568, 406, 316, 464, 48, 33, 111, 592, 283, 1128, 537, 1148, 418, 252, 925, 427, 975, 1066, 236, 300, 960, 1093, 952, 890, 447, 1083, 322, 414, 996, 259, 1071, 974, 408, 1065, 553, 96, 889, 867, 211, 1092, 47, 1079, 1247, 1220, 220, 72, 439, 542, 165, 536, 363, 384, 588, 65, 1004, 328, 1123, 32, 199, 235, 958, 193, 872, 298, 534, 1137, 521, 171, 417, 23, 122, 999, 1078, 1091, 957, 161, 395, 887, 983, 234, 10073, 299, 973, 1064, 382, 1069, 143, 49, 6, 146, 1107, 437, 1121, 600, 1238, 409, 93, 1182, 441, 70, 258, 566, 191, 164, 326, 519, 1082, 62, 219, 1246, 452, 1132, 507, 46, 359, 212, 31, 170, 1163, 1183, 163, 110, 168, 1237, 1120, 1161, 310, 187, 248, 541, 64, 30, 5, 1257, 1269, 22, 355, 1131, 516, 325, 1081, 429, 1077, 1090, 51, 422, 1245, 1174, 1235, 233, 45, 1184, 489, 1063, 423, 117, 124, 255, 160, 133, 977, 886, 145, 1215, 1213, 89, 1027, 69, 90, 1054, 1016, 997, 506, 982, 416, 210, 175, 309, 456, 297, 314, 10064, 1055, 1053, 44, 1133, 486, 1234, 167, 488, 415, 1212, 455, 1214, 10011, 1270, 662, 21, 1015, 989, 10029, 1109, 539, 527, 261, 663, 10072, 68, 1258, 1026, 178, 508, 1180, 1181, 4, 1273, 10069, 995, 324, 88, 63, 466, 1173, 1089, 981, 421, 216, 132, 1076, 435, 1073, 1266, 1256, 978, 420, 174, 904, 1175, 254, 296, 496, 1268, 450, 123, 116, 1074, 1231, 953, 1244, 313, 954, 1052, 505, 988, 444, 946, 198, 433, 391, 10016, 866, 1068, 10030, 319, 392, 308, 10031, 253, 434, 432, 436, 528, 454, 295, 10017, 1080, 1274, 10049, 1106, 1075, 312, 430, 10048, 577, 173, 1087, 302, 10057, 587, 10054, 209, 251, 301, 10056, 354, 1262, 327, 1088, 10059, 172, 10052, 323, 186, 208, 1108, 166, 10063, 24, 552, 1101, 144, 10051, 383, 10058, 162, 131, 578, 61, 263, 10060, 10071, 109, 115, 10024, 373, 1062, 10067, 10055, 256, 192, 29, 1255, 113, 87, 419, 10068, 10019, 10066, 177, 257, 43, 20, 487, 1070, 1, 67, 10032, 114, 42, 1172, 148, 1254, 10070, 86, 10015, 1236, 1253, 147, 185, 250, 112, 551, 66, 41, 3, 10000, 10001, 10002, 10003, 10004, 10012, 10013, 10020, 10018, 10025, 10026, 10027, 10028, 10033, 10037, 10038, 10050, 10053, 10062, 10061, 10065, 10021, 10074, 0)) GROUP BY `eshop_item_variant`.`id` HAVING `valid_price_group_to` < "2014-12-05 04:37:53" OR (`eshop_item_variant`.`valid_price_group_to_sold_out` = 1 AND `amount1` = 0) ORDER BY `id` DESC LIMIT 1000 OFFSET 0; |
||
Karel N. Profil |
#2 · Zasláno: 8. 12. 2014, 17:01:29
máš volné místo na disku? Jaké hodnoty máš nastavené pro
max_heap_table_size a tmp_table_size (*)? Tahle chyba znamená, že mysql nemohlo do temp tabulky uložit další záznamy při agregraci dat. V praxi buď dělám nevhodný dotaz nad moc velkou tabulkou nebo nemám místo na disku či mám nastavený příliš malé limity pro práci s takhle velkými datasety.
*) zjistíš je přes sql dotaz SHOW VARIABLES LIKE '%table_size%'
|
||
Kcko Profil |
#3 · Zasláno: 8. 12. 2014, 17:04:47
Karel N.:
obojí 33554432 Admin mě upozorňoval, že ten dotaz žere dost paměti, ale momentálně nevím jak to přepsat lépe a s konfigurační direktivou už hýbat nejde. |
||
Karel N. Profil |
#4 · Zasláno: 8. 12. 2014, 17:17:59
musíš zoptimalizovat dotaz, dají se samozřejmě změnit direktivy na serveru, ale je to cesta do pekel, pak ti nebude databáze stíhat.
Problém vidím v podobě having a limitu, kvůli tomu nejspíš musí databáze uložit do tmp tabulky až příliš dat. Databáze totiž do tmp tabulky musí vygenerovat vše a poté ti pošle nazpátek jen část, která je omezena limitem. Zkus s tím více experimentovat, limit se dá přepsat do bloku where nebo zjistit dopředu. Začni s tím, že místo limitu dáš omezení na `eshop_item_variant`.`id`, tak aby to přibližně odpovídalo 1000 položkám ( WHERE `eshop_item_variant`.`id` BETWEEN x, y AND ... ), pokud se dotaz výrazně zrychlí. Můžeš si id pro limit vypočítat dotazem dopředu. V opačném případě půjde také dotaz rozdělit na dvě části, tak abys zrušil having.
|
||
Kcko Profil |
#5 · Zasláno: 8. 12. 2014, 17:36:13
Karel N.:
Ok, díky zítra se na to ještě podívám. |
||
Časová prodleva: 9 let
|
0