• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سرعت پایین یک کوئری ؟
#1
سلام
دوستان عزیز من یک کوئری نوشتم که در لوکال زیر یک ثانیه انجام می شود ولی در هاست بیش از 15 ثانیه طول می کشد ؟ این کوئریه

SELECT `image`.*, SUM(UserType) AS sumusertype FROM `image` LEFT JOIN `rate` ON (`image`.`ImageId` = `rate`.`PartId`) WHERE `image`.`ImageId` NOT IN (SELECT `PartId` FROM `rate` WHERE `UserId` = '1') AND `image`.`UserId` != '1' AND `image`.`Delete` = '1' GROUP BY `rate`.`PartId` HAVING sumusertype < '25' ORDER BY `image`.`ImageId` LIMIT 6

حالا جالب اینجاست که بخش
`image`.`ImageId` NOT IN (SELECT `PartId` FROM `rate` WHERE `UserId` = '1')
را که بر می دارم سرعت زیر یک ثانیه می شه ؟

ممنون می شم دوستان راهنمایی کنند.
  پاسخ
تشکر شده توسط :
#2
دیتات روی سرور بیشتر بیشتر از لوکال هست درسته؟
  پاسخ
تشکر شده توسط :
#3
تقریبا دوبرابر ؟ خیلی سرعت اجرای اون بخش ساب کوئری زیاد طول می کشه بیش از 15 ثانیه ؟
  پاسخ
تشکر شده توسط :
#4
به جای NOT IN از NOT EXISTS استفاده کن نتیجه رو بگو
  پاسخ
تشکر شده توسط :
#5
به این شیوه اجرا کردم

SELECT `image`.*,SUM(UserType) AS sumusertype FROM `image` LEFT JOIN `rate` ON (`image`.`ImageId` = `rate`.`PartId`) WHERE `image`.`ImageId` NOT EXISTS (SELECT `PartId` FROM `rate` WHERE `UserId` = '1') AND `rate`.`Part` = 'Image' AND `rate`.`Delete` = '1' AND `rate`.`Rate` > '0' GROUP BY `rate`.`PartId` HAVING sumusertype < '25' ORDER BY `image`.`ImageId` LIMIT 6

ولی خطا داد :

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXISTS (SELECT `PartId` FROM `rate` WHERE `UserId` = '1')) AND `rate`.`Part` = '' at line 1

چطور شد ؟ مشکل mysql ؟
  پاسخ
تشکر شده توسط :
#6
http://dev.mysql.com/doc/refman/5.0/en/e...eries.html
  پاسخ
تشکر شده توسط :
#7
اینطوری جواب می ده ....

SELECT `image`.*,SUM(UserType) AS sumusertype FROM `image` LEFT JOIN `rate` ON (`image`.`ImageId` = `rate`.`PartId`) WHERE NOT EXISTS (SELECT `PartId` FROM `rate` WHERE `UserId` = '1') AND `rate`.`Part` = 'Image' AND `rate`.`Delete` = '1' AND `rate`.`Rate` > '0' GROUP BY `rate`.`PartId` HAVING sumusertype < '25' ORDER BY `image`.`ImageId` LIMIT 6


فقط یک سوال چطوری می تونم یک متغییر از همین کوئری داخل ساب کوئری بذارم ؟؟؟ مثلا این `image`.`ImageId` چطوری می تونم داخل ساب کوئری بذارم .

ممنونم از پاسختون
این طوری جواب نداد ؟؟؟؟

SELECT `image`.*,SUM(UserType) AS sumusertype FROM `image` LEFT JOIN `rate` ON (`image`.`ImageId` = `rate`.`PartId`) WHERE NOT EXISTS (SELECT `PartId` FROM `rate` WHERE `UserId` = '1' AND `image`.`ImageId` = `rate`.`PartId`) AND `image`.`UserId` != '1' AND `image`.`Delete` = '1' AND `rate`.`Part` = 'Image' AND `rate`.`Delete` = '1' AND `rate`.`Rate` > '0' GROUP BY `rate`.`PartId` HAVING sumusertype < '25' ORDER BY `image`.`ImageId` LIMIT 6
  پاسخ
تشکر شده توسط :
#8
ساختار جداولتون رو بزارین
  پاسخ
تشکر شده توسط :
#9
ساختارشون چطوری بذارم ؟

جدول image شامل imageid و ...
جدول rate شامل partid که همون imageid هستش و userid که امتیاز ارسال کرده

من می خوام عکس هایی را نمایش بده مجموع امتیاز از 25 کمتر باشه و یوزر آی دیش هم تکراری نباشه

---------------------------------------

الان این کوئری
SELECT `image`.*,SUM(UserType) AS sumusertype FROM `image` LEFT JOIN `rate` ON (`image`.`ImageId` = `rate`.`PartId`) WHERE NOT EXISTS (SELECT `PartId` FROM `rate` WHERE `UserId` = '1') AND `rate`.`Part` = 'Image' AND `rate`.`Delete` = '1' AND `rate`.`Rate` > '0' GROUP BY `rate`.`PartId` HAVING sumusertype < '25' ORDER BY `image`.`ImageId` LIMIT 6

مشکلی ندارد جز اینکه نمی دونم چطوری باید یک تابع از کوئری اصلی را داخل ساب کوئری بذارم ؟؟؟

  پاسخ
تشکر شده توسط :
#10
(۱۳۹۰ مرداد ۱۸, ۰۱:۳۵ ب.ظ)salam_ali نوشته: ساختارشون چطوری بذارم ؟

بسم الله الرحمن الرحیم
سلام
با این کوئری:
کد پی‌اچ‌پی:
show create table test \
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان