zoukankan      html  css  js  c++  java
  • mysql数据库查找类型不匹配

      无意中看到10级学长的博客,提到了mysql数据库类型查找不匹配的问题,博客地址是:卢俊达 。

    数据库中建表中会对每个属性进行类型划分,然后在查找数据库select时:

    MySQL 的文档 (Type Conversion in Expression Evaluation) 中提到,在做比较时,会按这样的规则进行必要的类型转换:

    两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 <=> 对两个 NULL 做比较时会返回 1,这两种情况都不需要做类型转换
    两个参数都是字符串,会按照字符串来比较,不做类型转换
    两个参数都是整数,按照整数来比较,不做类型转换
    十六进制的值和非数字做比较时,会被当做二进制串,和数字做比较时会按下面的规则处理
    有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
    有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal转换为浮点数进行比较
    所有其他情况下,两个参数都会被转换为浮点数再进行比较

    在博客:Xupeng's blog 中有提到,例如在表中存有name的属性,并且属性的类型是varchar,在进行数据库查找时,如果查找name = '11111111',则MySQL会将查询参数转换为确定的数值30,之后快速的再表中查找与之队形的数值。如果查找name = 1111111,则要查找的参数会被转化为浮点型,并且name字段的值也会被转换成浮点型,答案是在转换过程中,name属性的很多值,会转换成相等的数值,比如 '111222''111222aabb'' 111222' 和 '11122.2e1'.所以MySQL不能有效的使用索引,就退化为索引扫描甚至是全表扫描。所以会引起时间上和CPU利用率上的差异。

  • 相关阅读:
    判断一个点是否在一个不规则多边形内算法
    vue-cli 3.0 安装和创建项目流程
    微信小程序分享朋友圈的实现思路与解决办法
    vue2.0中关于active-class
    Nginx服务启动脚本
    Linux系统优化
    URL检测脚本
    Mysql读写分离php脚本
    Memcahed服务异常监控脚本
    一致性哈希算法PHP测试片段
  • 原文地址:https://www.cnblogs.com/chenyang920/p/8397910.html
Copyright © 2011-2022 走看看