千家信息网

使用MySQL的示例分析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了使用MySQL的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性表(product_props)结构如下数
千家信息网最后更新 2026年10月31日使用MySQL的示例分析

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

属性表(product_props)结构如下

数据量800W以上

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

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

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

产品表(product)结构如下

数据量40W以上

字段名类型说明
product_idintproduct_id
type_idint类型id
brand_idint品牌id
model_idint型号id
statustinyint状态

数据类似以下:

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

问题

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

要求

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

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

  1. 来自 @Kamicloud的 exist方案

SELECT     sql_no_cache `product_id`FROM    `zx_tests` AS aWHERE    `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 (单独查属性表)
  1. 来自 @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 (新问题之前)

新问题之后的性能排行

  1. 来自 @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分析:

        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分析:

  1. 来自 @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分析:

    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分析:


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

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

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

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

分析 属性 方案 苹果 产品 数据 篇文章 类型 范围 问题 查询 型号 性能 手机 条件 状态 速度 示例 内存 同时 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东万易互联网科技有限公司惠州分公司 互联网属科技 工业互联网科技新基建 青岛互联网科技公司 万易互联网科技有限公司 未来的互联网科技 奇酷互联网络科技公司 长亮科技互联网金融 互联网科技宣传片 成都狮子座互联网科技 昭通云南众福互联网科技有限公司 互联网还是高科技吗 彤创互联网科技有限公司 高科技互联网发展前景如何 工业互联网山东科技大学 广州有谷有贝互联网科技有限公司 中国科技和美国互联网 10位科技互联网大佬 上海旺乐尼互联网科技有限公司 科技发展第三阶段互联网时代 互联网科技公司起名 疫情对互联网科技公司影响 科技类的互联网平台 河南住房之家互联网科技 佛山市翊博互联网络科技有限公司 玉溪新华互联网科技好不好 皮皮虾互联网科技有限公司 本届互联网大会上的黑科技 昆明中奇联合互联网科技 易租星互联网科技有限公司
0