Postgres 和 PHP 的动态 SQL 查询
Dynamic SQL queries for Postgres and PHP
这样写有什么区别:
SET SCHEMA 'schema';
SELECT table2.field1,
table2.field2,
table2.field3,
table2.field4,
table2.field5,
table2.field6
FROM table2
WHERE table2.field1 LIKE '%{$search}%' and table2.field2 LIKE '%{$search2}%' and table2.field3 LIKE '%{$search3}%' and table2.field4 LIKE '%{$search4}%' and (table2.field5 ~* '{$search5}' {$radioa} table2.field6 ~* '{$search6}')
ORDER BY table1.field1 DESC, table1.field2 LIMIT {$radiob};
还有 plpgsql 中的东西?我的意思是,如果我将上面的内容翻译成 plpgsql,我会在速度或效率方面再获益吗?我应该坚持 PHP 中乏味的、动态的语句,还是疯狂使用 plpgsql?
两种情况下查询的执行时间相同。如果您 运行 来自 PLpgSQL 的客户端查询并不重要。区别在于结果处理。当您在服务器端(来自 PLpgSQL)处理结果时,网络和数据类型转换开销为零。客户端的数据处理成本要高得多 - 对于频繁调用的查询或大结果,客户端的处理速度要慢得多。
存储过程(服务器端代码)的另一个好处是异构环境的可访问性(您可以很好地共享此代码)。 PHP 您只能从 PHP 或通过 HTTP 协议调用的代码。但是这个优势在单体环境中并不显着(all is Java or all is PHP)。
这样写有什么区别:
SET SCHEMA 'schema';
SELECT table2.field1,
table2.field2,
table2.field3,
table2.field4,
table2.field5,
table2.field6
FROM table2
WHERE table2.field1 LIKE '%{$search}%' and table2.field2 LIKE '%{$search2}%' and table2.field3 LIKE '%{$search3}%' and table2.field4 LIKE '%{$search4}%' and (table2.field5 ~* '{$search5}' {$radioa} table2.field6 ~* '{$search6}')
ORDER BY table1.field1 DESC, table1.field2 LIMIT {$radiob};
还有 plpgsql 中的东西?我的意思是,如果我将上面的内容翻译成 plpgsql,我会在速度或效率方面再获益吗?我应该坚持 PHP 中乏味的、动态的语句,还是疯狂使用 plpgsql?
两种情况下查询的执行时间相同。如果您 运行 来自 PLpgSQL 的客户端查询并不重要。区别在于结果处理。当您在服务器端(来自 PLpgSQL)处理结果时,网络和数据类型转换开销为零。客户端的数据处理成本要高得多 - 对于频繁调用的查询或大结果,客户端的处理速度要慢得多。
存储过程(服务器端代码)的另一个好处是异构环境的可访问性(您可以很好地共享此代码)。 PHP 您只能从 PHP 或通过 HTTP 协议调用的代码。但是这个优势在单体环境中并不显着(all is Java or all is PHP)。