Singlestore
-
תגובה: SQL שאילתה תקועה... מה כן אפשר?
בהמשך לדיון לעיל
נפל לידי קישור לSinglestore
כמו הרבה דברים, אני חייב למשש אותם...הורדתי למחשב עם דוקר העמסתי עליו את הDB*
וניסיתי את השאילתה שאיתה פתחתי את הדיון לעיל
לנגד עיני נעשה הפלא... כ 950ms ויש תגובה.
מה שמעניין שפעם שני של אותה השאילתה חוזר אחרי כ 80msעוד כמה ניסיונות וראיתי שזה שווה משהו...
שאילתה כמו זאת:
select `records`.`id`, price.price as price, price.cost as cost, incomens.amount as incomens, price.price - price.cost as total, projects.`count` as projects, incomens.max as max_incomens, price.price - incomens.amount as balanse from `records` left join ( select CAST(`meta_records`.`value` AS UNSIGNED) as join_id, sum(`data3`.`value`) as price, sum(`data4`.`value`) as cost from `meta_records` INNER JOIN `meta_records` as `data2` on `data2`.`value` = `meta_records`.`record_id` INNER JOIN `meta_records` as `data3` on `data2`.`record_id` = `data3`.`record_id` INNER JOIN `meta_records` as `data4` on `data2`.`record_id` = `data4`.`record_id` WHERE `meta_records`.`field_id` = 5 and `meta_records`.`field_type` = "App\\Models\\Field" and `data2`.`field_id` = 7 and `data2`.`field_type` = "App\\Models\\Field" and `data3`.`field_id` = 10 and `data3`.`field_type` = "App\\Models\\Field" and `data4`.`field_id` = 11 and `data4`.`field_type` = "App\\Models\\Field" GROUP BY `meta_records`.`value` ) as price on price.join_id = records.id left join ( select CAST(`meta_records`.`value` AS UNSIGNED) as join_id, sum(`data3`.`value`) as amount, max(CAST(`data3`.`value` AS DECIMAL)) AS `max` from `meta_records` INNER JOIN `meta_records` as `data2` on `data2`.`value` = `meta_records`.`record_id` INNER JOIN `meta_records` as `data3` on `data2`.`record_id` = `data3`.`record_id` WHERE `meta_records`.`field_id` = 5 and `meta_records`.`field_type` = "App\\Models\\Field" and `data2`.`field_id` = 12 and `data2`.`field_type` = "App\\Models\\Field" and `data3`.`field_id` = 14 and `data3`.`field_type` = "App\\Models\\Field" GROUP BY `meta_records`.`value` ) as incomens on incomens.join_id = records.id left join ( select CAST(`meta_records`.`value` AS UNSIGNED) as join_id, count(*) as `count` from `meta_records` WHERE `meta_records`.`field_id` = 5 and `meta_records`.`field_type` = "App\\Models\\Field" GROUP BY `meta_records`.`value` ) as projects on projects.join_id = records.id WHERE records.collection_id = 2 order by records.id LIMIT 1000
בmysql: כ 600ms
בsimglestorge: כ 230ms (ובפעם השניה ואילך 120ms)מצד אחד אין בו מפתח זר ואימות נתון מלבד הסוג, גם אי אפשר ליצור כמה עמודת בunique אחד, ואולי עוד אי אלו חסרונות.
אבל מן הצד השני הוא מהיר בהרבה כאמור.
גם ראיתי שאפשר במשפט WHERE להשתמש בשמות העמודות (אין צורך בhaving)מישהו מכיר?
יש מה להגיד על זה?