zoukankan      html  css  js  c++  java
  • MYSQL数据库表排序规则不一致导致联表查询,索引不起作用问题

    Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题

    表更描述: 将mysql数据库中的worktask表添加ishaspic字段。

    具体操作:(1)数据库worktask表新添是否有图片字段ishaspic;新添字段时,报错

    [SQL] alter table WorkTask add ishaspic int(10) Null;
    [Err] 1034 - Incorrect key file for table 'WorkTask'; try to repair it

    解决方案:新建worktask表,添加ishaspic字段,将原worktask表中的数据插入新建表中.

    (2)生产环境部署变更代码,应用启动后,一段时间后台报错

    org.hibernate.exception.GenericJDBCException: Could not open connection

    java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.

    (3)监控数据库服务,发现查询sql突然变慢,数据库服务器CPU资源占用率超高。

    (4)变更回退,错误仍然存在。

    原来应用能正常运行,现在不能正常运行,监控数据库,发现sql查询执行时间突然变慢,单独执行sql,发现也很慢,到达百秒级。

    问题定位:在新建worktask表时,改变了表的排序规则,以至于使和所联表的排序规则不一样,导致联表查询SQL语句,索引不起作用。

    解决方案:(1)将联表查询SQL进行拆分;(2)调整数据表的排序规则,保证所联表数据表的排序规则一致。

    *************************************************************************************

    MySQL中的排序规则。在新建MySQL数据库或表的时候经常会选择字符集和排序规则。数据库用的字符集大家都知道是怎么回事,那排序规则是什么呢?

    排序规则:是指对指定字符集下不同字符的比较规则。其特征有以下几点:

    1、 两个不同的字符集不能有相同的排序规则

    2、 两个字符集有一个默认的排序规则

    3、 有一些常用的命名规则。如_ci结尾表示大小写不敏感(caseinsensitive),_cs表示大小写敏感(case sensitive),_bin表示二进制的比较(binary).

    在MySQL数据库中,可以使用show collation来查看支持的各种排序呢规则,我用的是MySQL 5.6.12-log版本的数据库,支持219种排序规则。

  • 相关阅读:
    数据库(DB)
    PHP课程设计
    版本号设计规则
    设计模式(Java)
    简单的流式布局(移动应用开发)
    laravel工作机制(PHP程序设计)
    接口自动化测试(软件测试)
    Java学习路线
    ES6基础知识
    promise
  • 原文地址:https://www.cnblogs.com/lmmblogs/p/6781430.html
Copyright © 2011-2022 走看看