PHP SQLite 喜欢慢

标签 php performance sqlite sql-like

我正在尝试分析网络流量。流量被保存到一个大约 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 通信和语句绑定(bind)的初始化如下所示:
$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?

最佳答案

好的。我们在我的另一个答案中决定索引在这种情况下无济于事。如果你被 sqlite 卡住了,那么你可以使用 全文搜索 (FTS) 引擎 .它包含在源代码中,但是您必须在启用此功能的情况下重新编译 sqlite 的麻烦。

更多信息:

http://answers.oreilly.com/topic/1955-how-to-use-full-text-search-in-sqlite/

关于PHP SQLite 喜欢慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560269/

相关文章:

java - 在 android sqlite 数据库中插入和执行查询时出错

php - Yii CDBCommand getText 显示 SQL 中的所有变量

php - 如何让 Symfony 呈现实体中可为空字段的复选框?

arrays - 将数据框转换为逗号分隔字符串列表的最快方法

python - 对于 SQL Server 以外的数据库,to_sql() 可替代 fast_executemany

java - 将 Java 连接到 SQLite

php - 如何优化这个 mysql/php 查询?

php - 在 zend Framework 2 的模型中获取数据库适配器

c# - 预加载下一个 IEnumerable<T> 值

mysql - 在 group by 子句中使用的列上添加索引好吗?