使我的查询更有效

时间:2014-11-26 10:34:34

标签: php sql indexing

我正在进行一个从我的数据库中提取字符串的查询。但它必须检查我导入的每一个新行。一个100k的文件需要大约4个小时才能导入。那太久了。我假设我的SQL代码检查他是否存在是减缓它的事情。 我听说过索引,但我不知道它是什么或如何使用它。

这是当前使用的代码:

$sql2 = $pdo->prepare('SELECT * FROM prospects WHERE :ssn = ssn');
$sql2->execute(array(':ssn' => $ssn));
if($sql2->fetch(PDO::FETCH_NUM) > 0){

所以每当phpscript读取一个新行时,都会进行此检查。问题是,我不能把它放在"复制键"在sql代码中。它必须在去任何sql之前检查,因为如果这是空的,那么它应该继续做它的事情。

我能做些什么来提高时间效率呢?而且,如果索引是要走的路,有人可以通过发布示例,链接指南或php.net页面来启发我如何做到这一点。以及我如何从该索引中读取我的代码中的内容

1 个答案:

答案 0 :(得分:1)

所以你有100k的记录并且你没有任何索引?然后从创建一个

开始
CREATE INDEX ssn_index ON prospects (ssn)

现在,每当您尝试从prospects表中选择where条件ssn列的内容时,MySQL将检查索引应该在哪里查找记录。如果此列具有强选择性(有许多不同的值),则查询将快速执行。

您可以通过查询来检查执行计划

 EXPLAIN SELECT * FROM prospects WHERE :ssn = ssn