Yii 字段緩存 SHOW FULL COLUMNS

今天在進行對Yii程序sql語句優化時發現了一個問題,在所有sql執行之前都會先執行一條sql語句如圖:














SHOW FULL COLUMNS FROM `pc07_user_0`,這條語句是什麼呢 首先我們先執行一下:



































可以看出 這條sql語句是獲取表的信息,包括字段信息,備註,主鍵等。爲什麼Yii 執行slq語句前都要獲取表信息呢? 因爲AR模式,將表映射到一個對象,表字段做爲對象的屬性。就是因爲這點,當你對多張表進行操作是 就會有多條SHOWFULLCOLUMNSFROM語句,而且這條語句耗時最大,圖一:耗時290毫秒,一個請求290毫秒,10個2.9秒,100個......想想都可怕。

解決方法:

在main.php 文件中的 db配置中加入 一個配置項:

        'db'=>array(
            'connectionString' => 'mysql:host=127.0.0.1;dbname=passport_sibu_cn;port=3306',
            'emulatePrepare' => true,
            'enableProfiling'=>true,
            //先從緩存中取數據表結構信息 有效時間爲1小時
            'schemaCachingDuration'=>3600,
            'enableParamLogging'=>true, 
            'username' => 'root',
            'password' => 'root',
            'charset' => 'utf8',
            'tablePrefix' => 'pc07_',
        ),
接下來要開啓緩存,在main.php文件中添加cache組件:
        'cache'=>array(
            'class' => 'CFileCache',
        ),

效果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章