哪种方式会有更好的性能 - 使用sql查询或php过滤/订购结果?

时间:2015-01-23 15:37:57

标签: php mysql sql performance

最近我尝试了新的方法来过滤/命令SQL查询:而是在SQL查询中过滤/排序结果我“按原样”提取所需的所有数据,然后使用php代码执行过滤器/订单。

例如:我只希望按日期命名为“test”的事件。

表格结构:

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查询按“原样”提取所有数据,然后在php中制作过滤器和订单

以上示例非常简单。我说的是更复杂的过滤......

如果您完全确定,请回答!

谢谢:)

2 个答案:

答案 0 :(得分:1)

Logicaly mysql在所有情况下都会更快(避免数据传输到php,mysql是用c ++编写的),但它是要测试的主题。

使用索引显示真正的力量。在您的情况下,您使用"喜欢'%value%'"这会禁用索引。但是可以用全文索引轻松解决。 InnoDB引擎也支持MySql 5.6全文索引。

答案 1 :(得分:0)

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

  1. 数据库的大小
  2. 数据库的索引方式
  3. 结果行的大小
  4. 使用PHP过滤的优点:

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

    使用PHP过滤的缺点:

    • 更高的RAM使用率,以及大数据集,这可能是一个真正的交易破坏者
    • 较慢(除非您的表格没有正确编入索引)

    使用SQL过滤的优点:

    • 通常要快得多,特别是在正确索引的表格上
    • 减少内存使用量
    • 减少要解析的数据

    使用SQL过滤的缺点:

    • 如果走得太远,SQL查询将变得不可读
    • 向查询移动更多逻辑可以使数据库可解释性更具挑战性(mySQL,SQLite等)

    你的milage我的变化。每个人都有自己的意见,但根据我的个人经验,我发现使用本机SQL过滤通常是更好的选择。请记住,最终目标应该是干净,可维护的代码。使用SQL Formatter可以使SQL更具可读性。