在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

使用MySQL的示例分析

125次阅读
没有评论

共计 4161 个字符,预计需要花费 11 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍了使用 MySQL 的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

属性表 (product_props) 结构如下

数据量 800W 以上

字段名类型说明 idintidpn_idint 属性类型 pv_idint 属性值 product_idint 产品 ID

其中 product_id 与 pn_id,pv_id 是一对多的关系。
数据类似这样:

product_idpn_idpv_id109705  (型号)135(苹果 9)1097011    (内存)23(512G)1097010    (颜色)17(土豪金)109708    (网络)6(5G)109805135109801124(1024G)109801016(极光蓝)

产品表 (product) 结构如下

数据量 40W 以上

字段名类型说明 product_idintproduct_idtype_idint 类型 idbrand_idint 品牌 idmodel_idint 型号 idstatustinyint 状态

数据类似以下:

product_idtype_idbrand_idmodel_idstatus109701(手机)1(苹果)1(Iphone8)1(正常)109801(手机)1(苹果)1(Iphone8X)3(已售)109811(手机)1(苹果)1(Iphone8XP)1(正常)

问题

找出型号为苹果 9 同时内存为 512G,颜色为土豪金,状态为正常的产品总数,
ps : 属性条件可能会有超过 10 组。

要求

性能第一,杜绝聚合函数等

原问题的解决方案性能排行

来自 @Kamicloud 的 exist 方案

SELECT 
 sql_no_cache `product_id`
 `zx_tests` AS a
WHERE
 `pn_id` = 101 AND `pv_id` = 59
 AND EXISTS( SELECT 
 sql_no_cache *
 FROM
 `zx_tests`
 WHERE
 a.product_id = product_id and
 `pn_id` = 101 AND `pv_id` = 171);
 2  组条件下  0.657,3  组  0.695,4  组  0.759,5  组  0.743 (单独查属性表)

来自 @Elijah_Wang 的子查询方案

SELECT `product_id` FROM `product` WHERE `pn_id` = 5 AND `pv_id` = 135 AND `product_id` IN (SELECT `product_id` FROM `product` WHERE `pn_id` = 11 AND `pv_id` = 23);
 2  组条件下  0.729,3  组  0.75,4  组  0.730,5  组  0.757 (新问题之前)

新问题之后的性能排行

来自 @Elijah_Wang 的子查询方案

 select SQL_NO_CACHE count(1) from pdi_product a join (
 SELECT
 distinct product_id
 FROM
 `product_props` 
 WHERE
 `pn_id` = 5 
 AND `pv_id` = 127
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 11 AND `pv_id` = 22 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 10 AND `pv_id` = 18 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 8 AND `pv_id` = 6 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 9 AND `pv_id` = 1 )
 ) b on a.product_id = b.product_id 
 where a.status = 1;

耗时 1.5-1.56(执行 10 次的范围)

expain 分析:

使用 MySQL 的示例分析

 select SQL_NO_CACHE count(1) from pdi_product a 
 where a.status = 1 and a.product_id in (SELECT
 distinct product_id
 FROM
 `product_props` 
 WHERE
 `pn_id` = 5 
 AND `pv_id` = 127
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 11 AND `pv_id` = 22 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 10 AND `pv_id` = 18 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 8 AND `pv_id` = 6 ) 
 AND `product_id` IN ( SELECT `product_id` FROM `product_props` WHERE `pn_id` = 9 AND `pv_id` = 1 ))

耗时 0.69-0.72(执行 10 次的范围)

explain 分析:
使用 MySQL 的示例分析

来自 @Kamicloud 的 exist 方案

 SELECT SQL_NO_CACHE
 count(1) 
 FROM
 product a
 WHERE
 a.STATUS = 1 
 AND a.product_id IN (
 SELECT DISTINCT
 `product_id` 
 FROM
 `product_props` AS a 
 WHERE
 a.`pn_id` = 5 
 AND a.`pv_id` = 127 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 11 AND `pv_id` = 22 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 10 AND `pv_id` = 18 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 9 AND `pv_id` = 1 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 8 AND `pv_id` = 6 ) 
 );

耗时 5.7-5.85(执行 10 次的范围)

explain 分析:

使用 MySQL 的示例分析

 SELECT SQL_NO_CACHE
 count(1) 
 FROM
 pdi_product a
 join (SELECT DISTINCT
 `product_id` 
 FROM
 `product_props` AS a 
 WHERE
 a.`pn_id` = 5 
 AND a.`pv_id` = 127 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 11 AND `pv_id` = 22 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 10 AND `pv_id` = 18 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 9 AND `pv_id` = 1 ) 
 AND EXISTS ( SELECT product_id FROM `product_props` WHERE a.product_id = product_id AND `pn_id` = 8 AND `pv_id` = 6 ) ) b
 on a.product_id = b.product_id
 WHERE
 a.STATUS = 1

耗时 5.7-6.0(执行 10 次的范围)

explain 分析:

使用 MySQL 的示例分析

可以看到如果单纯查属性表,第一位的速度是最快的,可要查产品状态后,速度反而不如子查询。

经 explain 分析,第一个子查询速度之所以快是因为它的 sql 简单,select_type 皆为 simple。

而不管是 join 还是 exists 的方式,select_type 大多为 DERIVED,DEPENDENT SUBQUERY。

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“使用 MySQL 的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-16发表,共计4161字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 国产精品视频久久 | 免费人成网站视频在线观看国内 | 国产伦精品一区二区三区免费迷 | 国产成人精品一区二三区在线观看 | 欧美在线视频精品 | 福利100合集 在线播放 | 国产福利麻豆精品一区 | 妺妺窝人体色www在线观看 | 少妇愉情理伦片高潮日本 | 久久精品亚洲99一区二区 | 亚洲黑人巨大videos | 妺妺窝人体色www在线小说 | 成人a级视频在线播放 | 亚洲精品国产精品乱码不97 | 亚洲香蕉视频 | 一级毛片成人免费看a | 特黄三级又爽又粗又大 | 国产成人综合亚洲欧美天堂 | 免费观看a级毛片视频 | 两个人看的www视频免费完整版 | 亚洲欧美激情综合首页 | 日本伊人色综合网站 | 大陆一级毛片免费视频观看 | 男人j进女人p免费视频 | 国产精品自在欧美一区 | 乱妇乱女熟妇熟女网站 | 国产免费又爽又色又粗视频 | 国产一区玩具在线观看 | 婷婷五月综合缴情在线视频 | 久久久久亚洲av成人无码电影 | 日本一级特黄在线播放 | 久一视频在线 | 亚洲人成网亚洲欧洲无码 | 四虎永久在线精品免费观看地址 | 神秘电影欧美草草影院麻豆第一页 | 亚洲av中文无码乱人伦下载 | 国产精品一区久久精品 | 国产一在线精品一区在线观看 | 人妻中文字幕无码专区 | 精品国产一区二区三区麻豆小说 | 两个人www高清免费视频 |