繁体   English   中英

PHP:多个SQL查询与一个怪兽

[英]PHP: Multiple SQL queries vs one monster

我有一些非常时髦的代码。 从下面的代码中可以看到,我添加了一系列过滤器以添加到查询中。 现在,拥有多个查询(具有自己的过滤器集),然后将结果存储在数组中,还是遇到这种麻烦,会更容易吗?

有谁对这个烂摊子有更好的解决方案? 我需要能够按关键字和项目编号进行过滤,并且它需要能够使用多个值进行过滤,而不知道是哪个。

//Prepare filters and values
$values = array();
$filters = array();
foreach($item_list as $item){
    $filters[] = "ItemNmbr = ?";
    $filters[] = "ItemDesc LIKE ?";
    $filters[] = "NoteText LIKE ?";
    $values[] = $item;
    $values[] = '%' . $item . '%';
    $values[] = '%' . $item . '%';
}
//Prepare the query
$sql = sprintf(
    "SELECT ItemNmbr, ItemDesc, NoteText, Iden, BaseUOM FROM ItemMaster WHERE %s LIMIT 21",
    implode(" OR ", $filters)
);
//Set up the types
$types = str_repeat("s", count($filters));
array_unshift($values, $types);

//Execute it
$state = $mysqli->stmt_init();
$state->prepare($sql) or die ("Could not prepare statement:" . $mysqli->error);
call_user_func_array(array($state, "bind_param"), $values);
$state->bind_result($ItemNmbr, $ItemDesc, $NoteText, $Iden, $BaseUOM);
$state->execute() or die ("Could not execute statement");
$state->store_result();

您的答案取决于您到底需要什么。 仅使用1个查询的优势是资源使用的优势。 一个查询仅需要1个连接和1个与sql服务器的通信。 而且,根据您要确切执行的操作,在1条语句中执行该语句所需的SQL能力可能比在多个语句中所需的SQL能力低。

但是,从程序员的角度来看,使用一些不那么复杂的sql语句(创建少于一个大的sql语句)可能更实用。 请记住,最后您正在对此进行编程,并且需要使其工作。 脚本处理与sql处理可能并没有真正的区别。 只有您可以进行最终通话,哪个更重要? 在处理大型数据库时,我通常建议在脚本过程之上进行SQL处理。

对于您的查询,我看不到特别可怕的地方。 我唯一要做的就是将搜索词分开。

即$ item_list可以分为数字项和文本项。

那么您可以进行如下搜索:

...WHERE ItemNmbr IN ( number1, number2, number3) OR LIKE .... $text_items go here.... 

IN效率更高,如果您的$ item_list不包含任何文本部分,那么您只是在搜索一堆数字,这确实非常快。

现在,如果您在查询中使用很多LIKE,那么接下来的部分也许您应该考虑使用MySQL全文搜索

SQL引擎可以缓存单个表查询。 MySQL及其同类不缓存联接的表。 性能的一般规则是仅在必要时使用联接。 这鼓励数据库引擎积极地缓存表索引,还使您的代码更易于适应(更快的)对象数据库-就像Amazon / Google云服务迫使您这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM