MySQL或PHP中的函数

时间:2008-11-01 20:12:39

标签: php mysql performance

在网络服务器或数据库中运行函数通常更好吗?

示例:

INSERT INTO example (hash) VALUE (MD5('hello'))

INSERT INTO example (hash) VALUE ('5d41402abc4b2a76b9719d911017c592')

好的,这是一个非常简单的例子,但是对于网站扩展到多个网站或数据库服务器的可扩展性,哪里最好“做好工作”?

6 个答案:

答案 0 :(得分:12)

我试着将数据库视为仅保留内容的地方,并将所有抽象代码放在其他位置。数据库表达式已经足够复杂,无需向它们添加函数。

此外,如果您最终想要执行“SELECT .... WHERE MD5(xxx)= ...”这样的操作,查询优化器将跳过任何带有函数的表达式

数据库功能通常不是很便携。

答案 1 :(得分:3)

每当需要这样的计算时,我尝试使用我的脚本语言中的函数。由于种种原因,我将SQL函数的使用率降至最低。

主要原因是我的一个SQL数据库负责托管多个网站。如果SQL服务器因来自一个站点的请求而陷入困境,则会对其余站点产生负面影响。例如,如果您正在使用共享服务器,这一点就更为重要,尽管在这种情况下您几乎无法控制其他用户正在做什么。

次要原因是我喜欢我的SQL代码尽可能便携。我甚至不想尝试来计算存在的SQL的不同风格,因此我尝试将函数(尤其是非标准扩展)保留在我的SQL代码之外,除了SUM或MIN / MAX。

我想我所说的是,SQL旨在存储和检索数据,并且应该保持这个目的。使用您选择的服务语言预先执行任何计算,并保持SQL代码的可移植性。

答案 2 :(得分:2)

就个人而言,我尝试使用Insert,Update,Delete保持数据库简单(最小化),而不需要在代码中使用太多功能。存储过程是相同的,仅包含与持久性数据非常接近且与业务逻辑无关的任务。

我会将MD5放在外面。这样就可以在数据库的存储范围之外进行这种“数据操作”。

但是,你的例子非常“简单”,我觉得把它放在里面是不好的......

答案 3 :(得分:2)

使用您的数据库作为持久化和保持数据完整性的手段。并将业务逻辑留在其外部。

如果您在数据库中放置了任何业务逻辑,那么将来管理和维护将变得更加复杂。

答案 4 :(得分:0)

我认为大部分时间,您都希望将数据操作留给Web服务器,但是,如果您想处理有关表,关系等的数据库,那么请转到数据库。

我个人游说我的公司将我们的MySQL服务器升级到5.0,以便我可以开始利用程序(这会杀死我们管理的几个网站)。

答案 5 :(得分:0)

与目前为止的其他答案一样,我更喜欢将所有业务逻辑保留在一个地方。即,我的应用语言。 (更具体地说,在对象模型中,如果存在一个,但并非所有代码都是OO。)

但是,如果你在StackOverflow中查看(我的)sql标记的关于是否使用内联SQL或存储过程的问题,你会发现大多数响应这些问题的人都强烈支持在任何时候使用存储过程。尽可能,即使是最琐碎的问题。你可能想看看其中的一些问题,看看有些赞成另一种方法的论点。