sqlsugar mysql count 为什么需要经过一层子查询 返回
C#论坛
老数据
4
2142
悬赏:5 飞吻
对某个表求count
var total = _db.Queryable<t_meetinguserscope>().Where(p => p.company_id == companyId && departUserIds.Contains(p.userid)).GroupBy(g => g.b_id).Count();
出来的sql语句是:
SELECT
COUNT(1)
FROM
(
SELECT
`userid`,
`username`,
`usertype`,
`helpcontent`,
`id`,
`b_id`,
`company_id`,
`sub_company_id`,
`create_by`,
`create_user_id`,
`create_time`,
`deletemark`,
`enabled`
FROM
`t_meetinguserscope`
WHERE
(
(`company_id` = '') and userid in ('1231')
)
GROUP BY
`b_id`
) CountTabl查看了一下explain:

正常来说应该如下:只需一步查询,也不需要产生一个派生表
SELECT
COUNT(1)
FROM
`t_meetinguserscope`
WHERE
(
(`company_id` = '') and userid in ('1231')
)
GROUP BY
`b_id` 
是否是出于其它数据兼容性考虑,才这样做?是否可以做到不求count 的时候不行执行一遍子查询?
热忱回答(4)
-
fate stay night VIP0
2020/12/11没有groupbyCount不会去包一层,一般你用Groupby应该用Select(it=>sqlfunc.xxcount(it=>it.xx)).first()
0 回复 -
fate stay night VIP0
2020/12/11GROUPBY 一般配合SELECT用 不是直接COUNT
0 回复 -
粤叶 VIP0
2020/12/11@fate stay night:你说的这种方式也是可行的

可能有点不是很完美的地方就是
可能是我个人我问题:
1、sql 语法习惯问题
2、产生没有必要的排序
0 回复 -
fate stay night VIP0
2020/12/11不用到 top 分页不会有排序,我这也是为了简化我ORM自带的逻辑考虑
0 回复