MySQL查询速度非常慢,结果为605500

时间:2014-07-14 08:25:47

标签: php mysql sql

我有这张桌子:

Field       Type          Null       Key                Default Extra
id          int(11)       NO         PRI                NULL    auto_increment
campaignId  int(11)       NO         MUL                NULL    
preview     tinyint(1)    NO         NULL   
pid         varchar(255)  NO         NULL   
ip          int(10)       unsigned   NO                 NULL    
data        longtext      NO         NULL   
created     timestamp     NO         CURRENT_TIMESTAMP  

当我使用此查询时:

SELECT
    SQL_CALC_FOUND_ROWS * 
FROM
    `participants`
USE INDEX (`indexed fields`)    
WHERE
    `campaignId` = 1
ORDER BY
    `created` DESC
LIMIT
    0,
    1000

此查询正在进行:

Query took 0.6166 sec

当我解释这个问题时:

id  select_type table           type    possible_keys   key  key_len  ref   rows    Extra
1   SIMPLE      participants    ALL     indexed fields  NULL NULL     NULL  605811  Using where; Using filesort

我有这些索引:

Table       Non_unique  Key_name        Seq_in_index            Column_name Collation   Cardinality Sub_part    Packed  Null    Index_type  Comment Index_comment
participants    0       PRIMARY         1           id          A           605811      NULL        NULL        BTREE       
participants    1       indexed fields  1           campaignId  A           1           NULL        NULL        BTREE       
participants    1       indexed fields  2           created     A           738         NULL        NULL        BTREE       

我真的不明白100%的解释,但我知道这个查询很慢。 我有大约605500个结果,我需要立即加载。 当我使用像这样的php脚本时(这个脚本多次执行上面的脚本):

for($i = 0; $i <= $participants->pageAmount; $i++):
            /*
             * loop through participant pages
             * Create a new sheet (not a new file) for every page of participants
            */
            $pageParticipants   = $this->fetchParticipants($i, $participantsPerPage);
            //$pageParticipants = true;
            echo $i."\n";
            if($pageParticipants === false) break; // no participants are found
            else{
//              $this->createSheet($i);
            }
        endfor;

已经花了14.3291 seconds做了3次脚本。 我想知道如何加快这个过程,所以我不必等待一周才能显示输出。

0 个答案:

没有答案