MySQL substring / in数组性能

时间:2012-11-29 12:38:01

标签: php mysql performance substring

我从MySQL表中选择行如下:

SELECT id, name, code FROM table

我现在要做的是选择代码以数组中指定的字符序列开头的行。什么是最佳实践 - a)更改MySQL查询并使用SUBSTRING和IN,或b)使用PHP以后过滤行?

A)

$qsql = mysql_query("SELECT id, name, code FROM table WHERE SUBSTRING(code, 1, 2) IN ('AB', 'BA', 'ZK', ...)");
while($sql = mysql_fetch_assoc($qsql)) {
    // Do something
}

或b)

$codes = array('AB', 'BA', 'ZK', ...);
$qsql = mysql_query("SELECT id, name, code FROM table");
while($sql = mysql_fetch_assoc($qsql)) {
    if(!in_array($sql['code'], $codes))
        continue;
    // Do something
}

代码数组可能有~30个元素。

2 个答案:

答案 0 :(得分:0)

A)让SQL尽可能地做它的事情。它几乎总是比以后处理数据更快。 SQL非常适合管理/过滤数据,所以尽可能使用SQL过程数据。

答案 1 :(得分:0)

动态生成LIKE列表。

$codes = array('AB', 'BA', 'ZK', ...);
$qsql = mysql_query("SELECT id, name, code FROM table WHERE code LIKE ('".implode("%','", $codes)."%')");
while($sql = mysql_fetch_assoc($qsql)) {
    // Do something
}

假设代码已消毒