美文网首页
糟糕的选择:sqlserver vachar字段使用unicod

糟糕的选择:sqlserver vachar字段使用unicod

作者: 飞了个鸽_figo | 来源:发表于2019-06-02 18:59 被阅读0次

    最近遇到了一个坑,这个坑把数据库搞挂了。。。

    最终找到的原因是出现在一个查询语句上,语句很简单,大概如下
    Select .. from table a where a.column in (N'test'...) 查询条件in的长度为100.初一看查询计划没有问题,a.column加了索引,所以查询计划包含了这个索引。但仔细一看其实不然,消耗最大的是filter,占到70%以上。

    为什么会这样,真相是,a.column这个字段是varchar类型的,索引通过Unicode查询相当于去匹配记录的值,性能非常糟糕。

    把语句改成
    Select .. from table a where a.column in ('test'...) 后,得到了预想的结果。执行效率上去了,数据库压力立马下来了

    在实际开发当中,我们绝对不会写出这种脚本;但是实际上,我们很少自己写脚本,一般使用ORM操作数据库。而我这个脚本是EF Core解析出来的,EF Core可以在mapping的时候使用IsUniclode(false) 指定这个字段不适用Unicode。

    如有问题或者更正信息,欢迎访问https://github.com/figodeng/QAndA

    相关文章

      网友评论

          本文标题:糟糕的选择:sqlserver vachar字段使用unicod

          本文链接:https://www.haomeiwen.com/subject/ggtfxctx.html