我正在进行一个从我的数据库中提取字符串的查询。但它必须检查我导入的每一个新行。一个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页面来启发我如何做到这一点。以及我如何从该索引中读取我的代码中的内容
答案 0 :(得分:1)
所以你有100k的记录并且你没有任何索引?然后从创建一个
开始CREATE INDEX ssn_index ON prospects (ssn)
现在,每当您尝试从prospects
表中选择where
条件ssn
列的内容时,MySQL将检查索引应该在哪里查找记录。如果此列具有强选择性(有许多不同的值),则查询将快速执行。
您可以通过查询来检查执行计划
EXPLAIN SELECT * FROM prospects WHERE :ssn = ssn