哪种方式会有更好的性能 - 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_fillter
和 usort
/array_multisort
和 array_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 全文索引。
答案取决于多种因素,包括:
- 你的数据库的大小
- 数据库的索引方式
- 结果行的大小
使用 PHP 过滤的优点:
- 不太复杂SQL 查询
- 可能更简单的代码
使用 PHP 过滤的缺点:
- 更高的 RAM 使用率和大型数据集,这可能是一个真正的交易障碍
- 较慢(除非你有一个 table 没有正确索引)
过滤 SQL 的优点:
- 通常要快得多,尤其是在正确索引的情况下 tables
- 更少的 RAM 使用
- 要解析的数据更少
使用 SQL 过滤的缺点:
- SQL 如果走得太远,查询可能会变得不可读
- 将更多逻辑转移到查询中会使数据库的可解释性更具挑战性(mySQL、SQLite 等)
你的里程我的变化。每个人都有自己的意见,但根据我个人的经验,我发现使用原生 SQL 过滤通常是更好的选择。请记住,最终目标应该是干净、可维护的代码。使用 SQL Formatter 大大提高了 SQL 的可读性。
最近我尝试了 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_fillter
和 usort
/array_multisort
和 array_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 全文索引。
答案取决于多种因素,包括:
- 你的数据库的大小
- 数据库的索引方式
- 结果行的大小
使用 PHP 过滤的优点:
- 不太复杂SQL 查询
- 可能更简单的代码
使用 PHP 过滤的缺点:
- 更高的 RAM 使用率和大型数据集,这可能是一个真正的交易障碍
- 较慢(除非你有一个 table 没有正确索引)
过滤 SQL 的优点:
- 通常要快得多,尤其是在正确索引的情况下 tables
- 更少的 RAM 使用
- 要解析的数据更少
使用 SQL 过滤的缺点:
- SQL 如果走得太远,查询可能会变得不可读
- 将更多逻辑转移到查询中会使数据库的可解释性更具挑战性(mySQL、SQLite 等)
你的里程我的变化。每个人都有自己的意见,但根据我个人的经验,我发现使用原生 SQL 过滤通常是更好的选择。请记住,最终目标应该是干净、可维护的代码。使用 SQL Formatter 大大提高了 SQL 的可读性。