当前位置:Gxlcms >
数据库问题 >
ThinkPHP5查询当前表引擎,以及InnoDB表引擎下count(*)查询效率低的问题
ThinkPHP5查询当前表引擎,以及InnoDB表引擎下count(*)查询效率低的问题
时间:2021-07-01 10:21:17
帮助过:47人阅读
xmsb_getCountField(
$tableName)
{
$dataBase = config(‘database.database‘
);
$tableDDL = Db::query("SHOW TABLE STATUS FROM `{
$dataBase}` WHERE name = ‘{
$tableName}‘");
// 获取表信息
$engine =
strtolower(
$tableDDL[0][‘Engine‘]);
// 取得表引擎信息
// 取得主键字段
$pk = DB::getTableInfo(
$tableName, ‘pk‘
);
if(
is_array(
$pk))
$pk =
$pk[0
];
// 若表引擎为InnoDB则判断是否存在非主键索引
if(
$engine == ‘innodb‘
)
{
$indexs = Db::query("SHOW INDEX FROM {
$tableName}"
);
$key =
$pk;
foreach(
$indexs as $index)
{
// 若存在非主键索引,则返回该索引对应的字段
if(
$index[‘Key_name‘] != ‘PRIMARY‘
)
{
$key =
$index[‘Column_name‘
];
break;
}
}
return $key;
}
else
{
// 非InnoDB引擎则直接返回主键字段
return $pk;
}
}
$count = Db::name(‘数据表名‘) ->
count(xmsb_getCountField(‘完整数据表名‘));
ThinkPHP5查询当前表引擎,以及InnoDB表引擎下count(*)查询效率低的问题
标签:prim 环境 代码 实时 一个 针对 thinkphp5 时间 php5