Yii2 MySQL如何防止重复select查询
Yii2 MySQL how to prevent duplicate select query
我在调试菜单中看到我有一些重复的 select 查询。特别是,这是我在 4 个不同文件中得到 4 次 SELECT * FROM page_adminlang WHERE (language=bg) AND (page_id=1)
的那个。有没有正确的方法来防止这种情况,这对网站速度性能有很大的影响吗?我应该在 $page = PageAdmin::findOne(1)
之类的变量中检索该行,然后在我需要的地方调用它吗?这是正确的方法吗?我红色其他文章,但它们主要用于插入时的重复行。不熟悉 MySQL 性能调优,但想深入了解这个 area.Thank 你提前!
我通常不会遇到这个问题,但如果我必须多次从数据库中检索某些内容(而且我知道这不会改变),我会在我的模型中做类似的事情
private $_myData = null;
public function getMyData() {
if ($this->_myData !== null) return $this->_myData;
$this->_myData = //query your data;
return $this->getMyData();
}
选项 1 - 配置 MemCache 组件
一个更简单的方法是启用数据库缓存,然后没关系,先设置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
....
]
]
参见:
- https://www.yiiframework.com/doc/guide/2.0/en/caching-data
- https://www2.0/yii-db.yiiframework.com/doc/api/-connection
选项 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();
}
我在调试菜单中看到我有一些重复的 select 查询。特别是,这是我在 4 个不同文件中得到 4 次 SELECT * FROM page_adminlang WHERE (language=bg) AND (page_id=1)
的那个。有没有正确的方法来防止这种情况,这对网站速度性能有很大的影响吗?我应该在 $page = PageAdmin::findOne(1)
之类的变量中检索该行,然后在我需要的地方调用它吗?这是正确的方法吗?我红色其他文章,但它们主要用于插入时的重复行。不熟悉 MySQL 性能调优,但想深入了解这个 area.Thank 你提前!
我通常不会遇到这个问题,但如果我必须多次从数据库中检索某些内容(而且我知道这不会改变),我会在我的模型中做类似的事情
private $_myData = null;
public function getMyData() {
if ($this->_myData !== null) return $this->_myData;
$this->_myData = //query your data;
return $this->getMyData();
}
选项 1 - 配置 MemCache 组件
一个更简单的方法是启用数据库缓存,然后没关系,先设置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
....
]
]
参见:
- https://www.yiiframework.com/doc/guide/2.0/en/caching-data
- https://www2.0/yii-db.yiiframework.com/doc/api/-connection
选项 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();
}