zoukankan      html  css  js  c++  java
  • 汉字转全拼音函数优化方案(SQLServer),值得你看看

    去年1月份时写了一篇关于优化汉字转拼音函数的解决方案,当时重点在于优化所举案例只能解决汉字转为拼音的首字母。

    前不久收到这样一条短消息

    随之我从(CSDN,CNBLOG,51CTO等)搜了几个解决方案,性能确实都不大理想。

    首先还是感谢园友这个问题,接下来我就从网上抽取两个案例作优化说明

     

    函数要求实现功能

    select 函数名 ('你好,我是追索')

    返回的结果(ni hao , wo shi zhui suo)

     

    解决方案一:

    解决方案一 

    测试了一串字符这个案例确实能达到汉字转拼音要求,但当我看到此函数内declare table、insert、order by等等这些耗性能的关键词让我感到头疼

    我们还是来看看它的执行开销

    估计子树大小大于5,这是多么惊人的一个数字。此执行计划后面跟着茫茫多的线条几乎全是表插入

    我用一万条数据测试该函数等了我1分多钟都没执行完毕,可见该解决方案性能差到极点。

     

    接下来我们看看解决方案二

    解决方案二

    测试了一串字符这个案例同样能达到汉字转拼音要求,该解决方案还好没让我看到表插入,这回性能应该大有提高

    我们来看那看它的执行开销

    果然不出所料,估计子树大小在0.017左右, 其中排序开销最大

    我用一万条数据测试该函数花了10秒左右

    既然排序开销最大那就优化该解决方案去掉order by。

    这时估计子树大小就在0.00001之下了,可你会发现此解决方案再怎么优化还是免不了需要常量扫描,where筛选等运算.

    我用一万条数据测试该优化后函数花了4~5秒左右

     

    出于对性能要求的不满足,打开工具我自己写了一个汉字转拼音的函数

    由于时间仓促未加任何注释,有问题可及时提出

    最后给出的就是重写的解决方案

    解决方案三

    我们来看它的执行计划

    没有排序,没有常量扫描,没有筛选器,没有计算标量

    估计子树大小为0

    我用一万行测试数据花0~2秒就把所有汉字转换为拼音

     

  • 相关阅读:
    SpringBoot第五篇:整合Mybatis
    SpringBoot第四篇:整合JDBCTemplate
    SpringBoot第三篇:配置文件详解二
    分享一篇去年的项目总结
    Oracle生成多表触发器sql
    Oracle 设置用户密码永不过期
    Oracle建表提示SQL 错误: ORA-00904: : 标识符无效
    MySql数据备份
    ETL全量多表同步简述
    ETL全量单表同步简述
  • 原文地址:https://www.cnblogs.com/ziyan22/p/2319776.html
Copyright © 2011-2022 走看看