• 1 رای - 3 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
سوال در مورد کوئری
#1
سلام

به نظرتون از این دو تا کوئری کدوم بهتره : توی یه جدول متوسط ( مثلا ۲۰۰ ۳۰۰ هزار تا فیلد ) کدوم بهتر جواب میده؟‌


کد پی‌اچ‌پی:
SELECT `news_story`.`id` AS `id`, `news_story`.`title` AS `title`, `news_story`.`alias` AS `alias`, `news_story`.`topic` AS `topic`, `news_story`.`short` AS `short`, `news_story`.`important` AS `important`, `news_story`.`publish` AS `publish`, `news_story`.`author` AS `author`, `news_story`.`hits` AS `hits`, `news_story`.`image` AS `image`, `news_story`.`imagedesc` AS `imagedesc`, `news_story`.`path` AS `path`, `news_story`.`comments` AS `commentsFROM `news_storyWHERE (topic IN (1)) AND (`status` = :where1 AND `inlist` = :where2) AND (publish > :where3 AND publish <= :where4) AND (expire OR expire 1344102985ORDER BY `publishDESC, `idDESC LIMIT :limit 

کد پی‌اچ‌پی:
SELECT `news_story`.* FROM `news_storyWHERE (topic IN (1)) AND (`status` = :where1 AND `inlist` = :where2) AND (publish > :where3 AND publish <= :where4) AND (expire OR expire 1344103102ORDER BY `publishDESC, `idDESC LIMIT :limit 

من به حدود ۱۰۰۰۰ خط دیتا توی جدول چک کردم اولی یکم سریع تر بود. نوع جدول هم InnoDB. در ضمن توی کوئری اول حدود دو سوم فیلد های جدول انتخاب شده

توی کوئری اولی اشکالی میبنیدی که باعث کندی یا هر چیز دیگه ای باشه؟

ممنون
  پاسخ
تشکر شده توسط :
#2
کوئری اول واکشی کمتری داره واسه همین سریعتره ، کوئری دوم ظاهر فریبنده ای دارهWink
بهتره داش وحید در این مورد نظر بده
وبلاگ rezaonline.net/blog
سفارش برنامه نویسی reza.biz
Php , mysql , postgresql , redis , Yii and ... Cool
  پاسخ
تشکر شده توسط :
#3
امیدوارم منظورت از فیلد row باشه Big Grin .
چون ۲۰۰-۳۰۰ هزار تا فیلد خیلی زیاده
کوئری اولی بهتره (چون هم فیلدهاش مشخصه و هم اینکه اگر فیلد اضافه باشه داخل رم واکشی نمیشه) ولی دیگه اون as رو نمی خواد
news_story ها هم که قبل از اسم فیلد آوردی اضافیه برشون دارو
  پاسخ
تشکر شده توسط : ali786
#4
میشه توضیح بدین کوئری های بالا دقیقا چیکار میکنن؟Big Grin
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط :
#5
نقل قول:امیدوارم منظورت از فیلد row باشه Big Grin .
چون ۲۰۰-۳۰۰ هزار تا فیلد خیلی زیاده
منظورم همون row بود :دی

من کوئری رو اینطوری مینویسم :
کد پی‌اچ‌پی:
$columns = array('id''title''alias''topic''short''important''publish''author''hits''image''imagedesc''path''comments');
      
$where = array('status' => 1'inlist' => 1);
      
$order = array('publish DESC','id DESC');
      
$limit 10;
      
$select Xoops::model('story',$params['module'])->select()->where('topic IN ('implode(','$topic_id) .')')->where($where)
      ->
where(array('publish > ?' => 0'publish <= ?' => time()))->where('expire = 0 OR expire > ' time() . '')->order($order)->limit($limit); 

احتمالا برای اون as و اس جدول رو باید از داخل کلاس select ادیت بشه.
نقل قول:میشه توضیح بدین کوئری های بالا دقیقا چیکار میکنن؟
قراره به عنوان ماژول اخبار ( صفحایت داینامیک ) در یه سی ام اس استفاده بشن :دی
  پاسخ
تشکر شده توسط :


پرش به انجمن:


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