数据库遇到过的坑

79 阅读1分钟

索引有序性导致的问题

  1. 在添加了组合索引时,只按一个条件查询会查询出意料之外的顺序,比如有个parent_id,image_name 的索引,image_name 是字符串,因为插入时是有顺序的,所以查询时就没排序,有个功能是每次查一页,按 parent_id 查询,翻第 2 页时发现从第 1 页直接到了 10 页,本来以为是插入顺序有误,排查发现无误,然后还排查别的,最后发现就是因为这个索引,数据库底层查询时走了这个索引,所以第二页就是第 10 页而不是第 1 页

索引问题

  1. 我们有任务表,根据 status 字段查询任务,但是这个 status 每加字段,原来编写这个 sql 的人认为,status 散列度较低,不能加,但是其实查询更多的是查 status = UnStart 的,大部分是 Finish 的,是可以加的

函数

  1. GROUP_CONCAT()
    • 排序是乱的,需要按照指定字段排序,比如 GROUP_CONCAT( name ORDER BY id )
    • 函数有长度限制,超过长度会被截断
  1. 查询 group_concat_max_len: show variables like "group_concat_max_len";
  2. 临时方案:
    1. 全局:SET GLOBAL group_concat_max_len =102400;
    2. 局部: SET SESSION group_concat_max_len =102400;
  3. 根本方案:
    1. 配置文件设置:group_concat_max_len =1024000 #参数值可以自己定义