【发布时间】:2014-02-04 18:18:16
【问题描述】:
我正在尝试分析网络流量。流量被保存到一个大约 300MB 的 SQLite 文件中,我正在尝试梳理该文件以查找关键字。
我有大约 10 个关键字,我为其生成突变(反向字符串、哈希等),每个关键字大约有 20 个变体。为了找到这些排列,我为每个关键字生成一个查询,该查询包括一个命令中的所有排列,用 OR 分隔。一个查询如下所示:
SELECT * FROM flows
WHERE
(buffer LIKE :permutationOne) OR
(buffer LIKE :permutationTwo) OR
(buffer LIKE :permutationThree) OR
…
(buffer LIKE :permutationTwenty)
SQLite 通信和语句绑定的初始化如下所示:
$sqlite = new PDO('sqlite:resources/traffic.sqlite'); // executed once
// done for each keyword
$statement = $sqlite->prepare($sqlCommand);
$statement->execute([':permutationOne' => '%perm1%', ':permutationTwo' => '%perm2%', …]);
我测量了执行这十个查询所需的时间,它在 150 到 300 秒之间变化,具体取决于执行查询的设备。由于文件很大,我执行了 10 个查询,每个查询有 20 个类似字符串,我想知道是否有办法优化查询?如果可能的话,我非常希望至少将执行时间减半。或者也许我应该使用另一个库而不是 PDO?
【问题讨论】:
标签: php performance sqlite sql-like