当前位置:首页 > SQL > 正文内容

mysql字段类型不一致导致的索引问题记录

高老师4年前 (2021-12-27)SQL3396

项目中出现SQL慢查询导致影响用户使用,原因是两个索引字段的类型不同导致无法使用索引,使用CONCAT转换为字符串即可解决

原始SQL:

SELECT
*
FROM
hqew_order_goods og
LEFT JOIN hqew_remove_list ri ON ri.order_rec_id = og.rec_id
AND real_removal_numbers > 8888
LEFT JOIN hqew_all_stock sl ON sl.removal_item_id = ri.id
AND sl.stock_log_type = 88
WHERE
( og.order_id = '888888' )
AND ( og.removal_numbers > 0 )

SQL问题点:(字段类型不同)

ri.order_rec_id = og.rec_id

修正SQL:

SELECT
*
FROM
hqew_order_goods og
LEFT JOIN hqew_remove_list ri ON ri.order_rec_id = CONCAT( og.rec_id, '' )
AND real_removal_numbers > 8888
LEFT JOIN hqew_all_stock sl ON sl.removal_item_id = ri.id
AND sl.stock_log_type = 88
WHERE
( og.order_id = '888888' )
AND ( og.removal_numbers > 0 )

扫描二维码推送至手机访问。

版权声明:本文由高久峰个人博客发布,如需转载请注明出处。

本文链接:https://blog.20230611.cn/post/360.html

分享给朋友:

“mysql字段类型不一致导致的索引问题记录” 的相关文章

mysql group分组排序

mysql group分组排序

下面的是商品数据表,id是主键,catename是分类,titile是标题,price是价格,现在要求计算每种分类下的商品平均价格.id     catename       &n...

MySQL中的where和having的区别

MySQL中的where和having的区别

   where与having非常类似.都能筛选数据.表达式完全一致.    但是职责的确不同.where负责对表中的字段进行筛选,having负责对where筛选后的结果集再次筛选。这也就是where不能使用别名字段来筛选的原因,因为数据中没有这个字段。&n...

 mysql储存引擎,mysql的5种储存引擎

mysql储存引擎,mysql的5种储存引擎

1.MyISAM 建立一个MyISAM引擎的表时,就会在本地磁盘上建立三个文件,.frm格式文件,存储表定义;.MYD格式文件,存储数据;MYI格式文件,存储索引;方便数据迁移,我只需将mysql安装目录下data文件中的表文件复制即可完成数据迁移,之前在搬迁多个dedecms中深有体会。 ...

mysql构建海量表,mysql 海量数据创建

mysql构建海量表,mysql 海量数据创建

海量表,数据量较大,并且每个字段的值具有唯一性。如果你创建的海量表只是数据多,索引是毫无意义的。构建海量时我们要使用存储过程。学习自韩顺平(1).创建一个测试数据库create  database  testdb;set names gbk;use testdb(2).创建dep...

mysql null转空字符串,mysql null转0

mysql null转空字符串,mysql null转0

项目中查询数据部分字段出现null,影响到了排序,但是由于没有数据库权限,还想将null转为其他值表示;例如现有表member的原始数据:SELECT  *  FROM  memberid    &n...

mysql变更字段值为另一张表的某个值

mysql变更字段值为另一张表的某个值

(1).下面是一张基本的会员表membermid      name    age 1 高峰 24 2 王小 19 3 韩星 24(2).下面是一张基本的会员日志表loglid  ...