我有这张桌子:
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次脚本。
我想知道如何加快这个过程,所以我不必等待一周才能显示输出。