2016-04-08 16 views
-1

3 tablo oluşturdum imei, post ve view. Tüm 3 masada 1000 kayıt var. Şimdi b/m sorgusunu çalıştırdığımda, cevap vermesi çok uzun sürüyor.MySQL Sub Query, yanıt vermek için uzun zaman alıyor

Tablo tasarım & örnek veriler aşağıda verilmektedir:


CREATE TABLE IF NOT EXISTS `imei` (
    `imei_id` int(5) NOT NULL AUTO_INCREMENT, 
    `imei_no` varchar(30) NOT NULL, 
    `imei_net` varchar(30) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`imei_id`), 
    UNIQUE KEY `imei_no` (`imei_no`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1346 ; 

CREATE TABLE IF NOT EXISTS `post` (
    `post_id` int(5) NOT NULL AUTO_INCREMENT, 
    `post_title` varchar(60) NOT NULL, 
    `post_desc` varchar(500) NOT NULL, 
    `post_author` varchar(30) NOT NULL DEFAULT 'Admin', 
    `user_id` int(10) NOT NULL DEFAULT '1', 
    `date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`post_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=876 ; 

CREATE TABLE IF NOT EXISTS `view` (
    `view_id` int(5) NOT NULL AUTO_INCREMENT, 
    `post_id` int(11) NOT NULL, 
    `imei_id` varchar(30) NOT NULL, 
    `status` varchar(10) NOT NULL, 
    `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`view_id`), 
    UNIQUE KEY `imei_id` (`imei_id`,`post_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13706 ; 

Değerler tablo içinde:

IMEI:

INSERT INTO `imei` (`imei_id`, `imei_no`, `imei_net`, `date`) VALUES 
(1, '123456789', 'Airtel', '2015-08-06 07:39:47'), 
(2, '23456789', 'Aircel', '2015-08-06 06:08:33') 

SONRASI:

INSERT INTO `post` (`post_id`, `post_title`, `post_desc`, `post_author`, `user_id`, `date`) VALUES 
    (1, 'NSC Rate Down', 'NSC rates are getting down from today', 'Admin', 1, '2015-07-08 05:29:54'), 
    (2, 'NCDEX offers cashback', 'NCDEX offers cashback for the previous users', 'Admin', 1, '2015-07-08 05:30:01') 

GÖRÜNÜM:

INSERT INTO `view` (`view_id`, `post_id`, `imei_id`, `status`, `date`) VALUES 
(1, 1, '1', '1', '2015-08-08 05:04:38'), 
(7, 2, '1', '1', '2015-08-08 07:55:25') 

Sorgu Yürütme:

SELECT 
    * 
FROM 
    (
     SELECT 
      i.imei_id, 
      i.imei_no, 
      p.post_id, 
      p.post_title, 
      p.post_desc, 
      p.date, 
      1 AS STATUS 
     FROM 
      imei i, 
      post p, 
      VIEW v 
     WHERE 
      i.imei_id = v.imei_id 
     AND p.post_id = v.post_id 
     AND i.imei_no = 356554064098771 
     UNION 
      SELECT 
       i.imei_id, 
       i.imei_no, 
       p.post_id, 
       p.post_title, 
       p.post_desc, 
       p.date, 
       0 AS STATUS 
      FROM 
       imei i, 
       post p 
      WHERE 
       i.imei_no = 356554064098771 
      AND p.post_id NOT IN (
       SELECT 
        v.post_id 
       FROM 
        imei i, 
        post p, 
        VIEW v 
       WHERE 
        p.post_id = v.post_id 
       AND v.imei_id = (
        SELECT 
         i.imei_id 
        FROM 
         imei i 
        WHERE 
         imei_no = 356554064098771 
       ) 
      ) 
    ) AS temp 
WHERE 
    date >= DATE_SUB(
     (
      SELECT 
       date 
      FROM 
       imei 
      WHERE 
       imei_no = 356554064098771 
     ), 
     INTERVAL 1 WEEK 
    ) 
ORDER BY 
    date DESC 
+0

Sonuç olarak ne bekliyorsunuz? – mitkosoft

+0

Pls de açıklamanın sonuçlarını içerir. – Shadow

+0

Uygun sonuç alıyorum, ancak "değil" durumunu kullanırken daha fazla zaman alır. Alternatif bir çözüme ihtiyacım var – Lijibals

cevap

0

10 ise, post_desc, post_title, post_iddate SEÇ bu sorgu deneyin ((post_id içinde (WHERE imei_id = (imei DAN imei_id SEÇ view DAN post_id Where imei_no = 865645026396909))), 1,0) post DAN durumu olarak

+0

Bu sorgu çalışıyor! Yükleme süresi 0,4'ten 0,05'e düşürüldü. Mümkünse yükleme süresini azaltmak için daha fazla optimize edin, kod için teşekkürler. – Lijibals

İlgili konular