• 慢sql_查询条件加了函数导致索引失效


    问题背景:生产环境查询很慢,通过skywaking全链路监控发现/get请求相关的一个sql为慢sql,慢的原因在于查询字段使用了加解密函数(  CONVERT(AES_DECRYPT(UNHEX(`字段名`),'密钥') USING utf8)  )

    以下为验证过程:

    【先往表target_regulator_tx_info中插入数据用来测试查询操作,其中字段sender为加密字段】

    >>>>>>>>>>>>>>>>>>先看看没有索引时的查询情况<<<<<<<<<<<<<<<<<<<<<<

     

     可以看到:没有索引走的全表扫描。顺便看一下查询条件使用函数时的耗时:

     可以看到:用sender这个字段查询时,在同样没有索引的条件下,使用函数比不使用函数慢

    >>>>>>>>>>>>>>>>>>DONE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    >>>>>>>>>>>>>>>>>>再来看看加上索引时的查询情况<<<<<<<<<<<<<<<<<<<<<<

     

     

     可以看到:加了索引后此时走的索引扫描。顺便看一下查询条件使用函数时的耗时:

    可以看到: 即使这个字段加了索引,这种条件下查询时依然是那么慢

    >>>>>>>>>>>>>>>>>>DONE<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    优化:修改sql,查询条件不进行函数运算,查询条件的值进行加解密运算后,再进行查询

  • 相关阅读:
    Porter Stemming Algorithm
    Hook API to detect memory leak
    Are tuples more efficient than lists in Python?
    boost::intrusive_ptr VS boost::shared_ptr
    How Python GC deal with referencecycles?
    LINQ排序数组
    Sublime Text 2 (Version 2.0.1 build 2217) x64 破解注册方法
    GC in C# and Python
    Python中的else
    Managed C++ Destructor
  • 原文地址:https://www.cnblogs.com/jinziguang/p/16082518.html
Copyright © 2020-2023  润新知