您当前的位置: 首页 >  sql

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

mysql 取交集 锁表

qq_34412985 发布时间:2019-01-24 23:08:26 ,浏览量:0

1.最近项目上通过sku_property表中需要多条件查询skuid反查询,property_code和property_value_code同时满足最多9个条件查询出skuId,表中数据有300多万

sql语句如下:

select s.*,sp.* from sku s inner join sku_property sp on s.id=sp.sku_id where sp.sku_id  in (select temp.sku_id (select sku_id from sku_property where (property_code='1111' and property_value_code='222') or (property_code='1111' and property_value_code='333') or (property_code='1111' and property_value_code='444') group by sku_id having count(sku_id)>3 limit 0,10)temp)

mybatis中  condition的数据是  List    3用这个取值(#{condition.size}-1)

多个or条件使用 foreach中的 item="item"  index="index" collection="condition" open"(" close=“)” separator=")or("

foreach中的内容是:  property_code=#{item.propertyCode} and property_value_code=#{item.propertyValueCode}

期间将2列值合并为1列也用in代替多个or时间和多个or差不多

300多万数据,navicat上执行,实际估计还有结果映射成实体还得多耗点儿时间    查询最多4个条件加分页几十毫秒执行完成,如果到5个以上后就得1.5s到2s   条件达到9后,执行count(sku_id)>3时也挺快的,但是做交集要 count(sku_id)>8

期间培训库上使用insert  into sku_property_copy(id,sku_id,property_code,property_value_code) select id,sku_id,property_code,property_value_code from sku_property

insert  into sku_property_copy select * from sku_property  期间有tinyint的报错提示int类型插入不进去type字段

解决方案:插入中间表

 

锁表:

sku_property_copy上加了6个左右索引,期间执行insert into select 查询插入导致sku_property_copy中间表数据达到800多万,删除索引同时有人通过web应用操作数据库造成数据库表锁表,此时用show processlist可以查看mysql多个执行中的进程。将block wait的进程kill掉进程id就release掉表锁。

操作数据库前一定要back replica,同时不要使用别人的table  test

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0389s