ホームページ  >  記事  >  バックエンド開発  >  phpはforeachクエリを最適化します

phpはforeachクエリを最適化します

WBOY
WBOYオリジナル
2016-08-08 09:24:131280ブラウズ

phpコードの最適化

<code>应避免在php foreach里面进行sql查询
以下代码示例使用了laravel的操作数据库api,eloquent orm
</code>

foreach内で2つのSQLクエリを実行

<code><span>// $datas 要返回的数据</span>
foreach (<span>$datas</span> as <span>$_v</span>) {
    <span>// todo 在foreach中查询了两次 **time**: 290 ms(postman)</span><span>$uid</span><span>=</span><span>$_v</span><span>-></span>uid;
    <span>$_v</span><span>-></span>user_name   <span>=</span> User<span>::find</span>(<span>$uid</span>)<span>-></span>username; <span>// 1</span><span>$_v</span><span>-></span>user_avatar <span>=</span> User<span>::find</span>(<span>$uid</span>)<span>-></span>avatar;   <span>// 2</span>
}</code>

foreach内で1つのSQLクエリを実行

<code>foreach (<span>$datas</span> as <span>$_v</span>) {
    <span>// todo</span><span>// 简单的优化使得两次sql查询变成一次</span><span>// 在foreach中查询了一次 **time**: 230 ms(postman)</span><span>$user</span><span>=</span> User<span>::find</span>(<span>$_v</span><span>-></span>uid));     <span>// 1</span><span>$_v</span><span>-></span>user_name   <span>=</span><span>$user</span><span>-></span>username;
    <span>$_v</span><span>-></span>user_avatar <span>=</span><span>$user</span><span>-></span>avatar;
}</code>

SQLクエリをforeachの外に移動

<code>上面两个方法都不可避免的在foreach里面执行了数据库查询
**应避免在foreach中执行sql查询**
此处我的做法是再加一层foreach+if来代替sql查询
// 本质上是将foreach中的查询移到外面
</code>
rreee

概要

<code><span>// $tmp_data_arr 是存储在foreach外面执行的数据库查询结果</span><span>foreach</span> (<span>$tmp_data_arr</span><span>as</span><span>$value</span>) {
    <span>foreach</span> (<span>$datas</span><span>as</span><span>$_v</span>) {
        <span>if</span> (<span>$_v</span>->uid === <span>$value</span>[<span>'id'</span>]) { <span>// **time**: 180 ms(postman)</span><span>$_v</span>->user_name   = <span>$value</span>[<span>'username'</span>];
            <span>$_v</span>->user_avatar = <span>$value</span>[<span>'avatar'</span>];
        }
    }
}</code>
rreee

ps

<code><span>// 返回数据</span><span>return</span><span>$datas</span>;</code>

上記は、内容の側面も含めて PHP 最適化クエリ foreach を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。