2017-02-04 23 views

回答

1

DB喜欢或对strpos或的preg_match

你可能在你的数据库table多行。如果您全部加载它们,然后使用strpospreg_match进行应用程序级别的筛选,那将意味着所有记录都将从数据库table加载到内存中,为您的PHP代码提供服务,并将这些代码存储在内存中。如果数据库服务器与应用程序服务器不同,则所有数据都必须通过网络或Internet路由发送。这些内存操作和数据传输会降低你的操作速度,因此,尽可能在数据库端进行过滤,因为即使由于某种原因db也是如此。操作比PHP函数稍慢,大内存操作和数据传输太多了。

像主场迎战

当你正在做一个像您可以使用%通配符。如果你需要,那么in将不会是一个选项。否则,当您使用的是这样的:

where myfield in ('a', 'b', 'c') 

,或者你使用这样的:

where myfield like 'a' or myfield like 'b' or myfield like 'c' 

,或者你使用这样的:

where myfield = 'a' or myfield = 'b' or myfield = 'c' 

第一和第三个选项是相同的,但是您需要在第一种情况下输入较少的内容,并且您可以更轻松地生成查询。第二个应该更慢,因为必须检查通配符和东西。

strpos对比的preg_match

strpos发现在干草堆里sequenctially针的第一次出现,而基于图案preg_match搜索。后者较慢,因为它必须检查正则表达式运算符,但它有更多的可能性,您可以搜索一个模式而不是给定的针串。