分表优化建议,执行速度差异很大 返回

SqlSugar
3 306
该叫什么 Mr.An 发布于2022/1/15
悬赏:0 飞吻

我的意思表达的着急了,没表述清楚,我在重新说一下


方式1 的查询速度要比 方式2 快大约65% (数据库表数量25张),主要是慢在了 这段筛选上 tas => tas.InTableNames(name),我简单跟踪了一下


方式1

var name=Db.SplitHelper<SplitTestTable>().GetTableName(Skey);//自定义分表,获取表名(分表是根据最后一个数字分的表,0-9 一共有10张分表)
Db.Queryable<SplitTestTable>().Where(it => it.Skey==data.Skey).AS(name).Single();


方式2

var name=Db.SplitHelper<SplitTestTable>().GetTableName(Skey);
Db.Queryable<SplitTestTable>().Where(it => it.Skey==data.Skey).SplitTable(tas => tas.InTableNames(name)).Single();



热忱回答3

  • fate sta fate sta VIP0
    2022/1/15

    上面是更新,下面是查询 没看懂你想表达什么

    0 回复
  • Mr.An Mr.An VIP0
    2022/1/15

    @fate sta:我的意思表达的着急了,没表述清楚,我在重新说一下


    方式1 的查询速度要比 方式2 快大约65% (数据库表数量25张),主要是慢在了 这段筛选上 tas => tas.InTableNames(name),我简单跟踪了一下


    方式1

    var name=Db.SplitHelper<SplitTestTable>().GetTableName(Skey);//自定义分表,获取表名(分表是根据最后一个数字分的表,0-9 一共有10张分表)
    Db.Queryable<SplitTestTable>().Where(it => it.Skey==data.Skey).AS(name).Single();


    方式2

    var name=Db.SplitHelper<SplitTestTable>().GetTableName(Skey);
    Db.Queryable<SplitTestTable>().Where(it => it.Skey==data.Skey).SplitTable(tas => tas.InTableNames(name)).Single();


    0 回复
  • fate sta fate sta VIP0
    2022/1/15

    @Mr.An: SplitTable 就一个gettables方法我本地测试90张表也是20毫秒左右  

    那么执行A SQL是10毫秒  

    那么执行B SQL是 10+15毫秒 ,确实是慢了65% 


    那么执行A SQL是10秒

    那么执行B SQL是 10秒+ 0.015 , 2者性能几乎一样的 差距只有0.1%


    这才是分表的意义,你忽视了SQL本身执行时间随着数据增多是会变的,而SplitTable时间是固定的 


    0 回复