哪种方式会有更好的性能 - Filter/Order 结果与 sql 查询或 php?

Which way will have better performance - Filter/Order results with sql query or php?

最近我尝试了 filter/order SQL 查询的新方法:而不是过滤/排序 SQL 查询中的结果 我提取我需要的所有数据 "as is" 然后做使用 php 代码过滤/订单。

例如:我只想要名称类似于 "test" 按日期排序的事件。

Table 结构:

id     eventDate     eventName

新方式:

$query = mysqli_query($GLOBALS["link"], "SELECT `eventDate`, `eventName` FROM `tablename` WHERE `id`='X' ");
        while($data = mysqli_fetch_array($query))array_push($this->events,$data); 

然后我在 php...

中使用 array_fillterusort /array_multisortarray_values

旧方法:

$query = mysqli_query($GLOBALS["link"], "SELECT `eventDate`, `eventName` FROM `tablename` WHERE `id`='X' AND (`eventName` LIKE '%test%') ORDER by `eventDate` DESC ") ;
        while($data = mysqli_fetch_array($query))array_push($this->events,$data); 

那什么更好呢? 复杂 sql 查询 提取所有数据 "as is" 然后在 php 中进行筛选和排序?

上面的例子很简单。我说的是更复杂的过滤...

有把握请回答!

谢谢:)

逻辑上mysql在所有情况下都会更快(避免数据传输到php,mysql是用c++写的),但它是有待测试的。

索引的使用揭示了真正的力量。在您的情况下,您使用 "like '%value%'" 禁用索引。但是用全文索引很容易解决。 MySql InnoDB 引擎也支持 5.6 全文索引。

答案取决于多种因素,包括:

  1. 你的数据库的大小
  2. 数据库的索引方式
  3. 结果行的大小

使用 PHP 过滤的优点:

  • 不太复杂SQL 查询
  • 可能更简单的代码

使用 PHP 过滤的缺点:

  • 更高的 RAM 使用率和大型数据集,这可能是一个真正的交易障碍
  • 较慢(除非你有一个 table 没有正确索引)

过滤 SQL 的优点:

  • 通常要快得多,尤其是在正确索引的情况下 tables
  • 更少的 RAM 使用
  • 要解析的数据更少

使用 SQL 过滤的缺点:

  • SQL 如果走得太远,查询可能会变得不可读
  • 将更多逻辑转移到查询中会使数据库的可解释性更具挑战性(mySQL、SQLite 等)

你的里程我的变化。每个人都有自己的意见,但根据我个人的经验,我发现使用原生 SQL 过滤通常是更好的选择。请记住,最终目标应该是干净、可维护的代码。使用 SQL Formatter 大大提高了 SQL 的可读性。