Yii2 MySQL如何防止重复选择查询

Yii2 MySQL如何防止重复选择查询,mysql,yii2-advanced-app,Mysql,Yii2 Advanced App,我在调试菜单中看到一些重复的select查询。特别是,这是我在4个不同的文件中4次从page_adminlang WHERE(language=bg)和(page_id=1)中得到的。有没有一种正确的方法来防止这种情况发生?这对网站的速度性能有很大影响吗?我是否应该在一些变量中检索行,比如$page=PageAdmin::findOne(1),然后在需要的地方调用它,这是正确的方法吗?我对其他文章进行了修改,但它们主要用于插入时的重复行。不熟悉MySQL性能调整,但想在这方面做得更深入一些。提前

我在调试菜单中看到一些重复的select查询。特别是,这是我在4个不同的文件中4次从page_adminlang WHERE(language=bg)和(page_id=1)中得到的。有没有一种正确的方法来防止这种情况发生?这对网站的速度性能有很大影响吗?我是否应该在一些变量中检索行,比如
$page=PageAdmin::findOne(1)
,然后在需要的地方调用它,这是正确的方法吗?我对其他文章进行了修改,但它们主要用于插入时的重复行。不熟悉MySQL性能调整,但想在这方面做得更深入一些。提前谢谢

我通常不会遇到这个问题,但是如果我必须多次从数据库中检索某些内容(我知道这不会改变),我会在我的模型中执行类似的操作

private $_myData = null;
public function getMyData() {
    if ($this->_myData !== null) return $this->_myData;

    $this->_myData = //query your data;
    return $this->getMyData();
}

选项1-配置MemCache组件

一个更简单的方法是启用db缓存,这样就没关系了,先设置5秒的持续时间

在组件数据库连接设置中,设置以下属性:

'components' => [
    'db' => [
        'class' => 'yii\db\Connection',
        'dsn' => 'mysql:host=localhost;dbname=dbname',
        'username' => 'root',
        'password' => 'password',
        'charset' => 'utf8',
        ....
        'enableQueryCache' => true,
        'queryCacheDuration' => 5, // five seconds
        ....
    ]
]
见:

  • 选项2-带缓存的自定义查询

    public function getResults()
    {
        // Cache expires every x seconds (60sec/min * 60min/hr * 6hrs)
        $duration = 60*60*6; 
        $sql_query = "SELECT * FROM some_table";
        
        return Yii::$app->db->createCommand($sql_query)->cache($duration)->queryAll();
    }
    

    你认识这个问题吗?你知道它在密码里的什么地方吗?是的,我知道它在哪里;查看查询缓存和数据缓存。是的。这就是我要找的。谢谢你们两位。现在的问题是我无法在xampp上启用memcached。。。p、 我已经计划迁移到Linux了……记住,在本地机器上不一定需要memcached。您可以在本地使用Filecache,在生产服务器上使用memcached。唯一需要更改的是环境之间的配置。