iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >使用MySQL的示例分析
  • 512
分享到

使用MySQL的示例分析

2024-04-02 19:04:59 512人浏览 泡泡鱼
摘要

这篇文章主要介绍了使用Mysql的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性表(product_props)结构如下数据量8

这篇文章主要介绍了使用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 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 (单独查属性表)
  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分析:

使用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的示例分析

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

使用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。

感谢你能够认真阅读完这篇文章,希望小编分享的“使用mysql的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: 使用MySQL的示例分析

本文链接: https://www.lsjlt.com/news/54389.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用MySQL的示例分析
    这篇文章主要介绍了使用MySQL的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。属性表(product_props)结构如下数据量8...
    99+
    2024-04-02
  • 使用Ajax的示例分析
    这篇文章主要为大家展示了“使用Ajax的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用Ajax的示例分析”这篇文章吧。什么是ajaxajax(异步j...
    99+
    2024-04-02
  • 使用VanillaJS的示例分析
    这篇文章给大家分享的是有关使用VanillaJS的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。时间注意原始操作符比函数调用快,使用VanillaJS比如,一般不要这样:...
    99+
    2024-04-02
  • 使用Vue的示例分析
    这篇文章将为大家详细讲解有关使用Vue的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优...
    99+
    2023-06-15
  • rsync使用的示例分析
    这篇文章给大家介绍rsync使用的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。要想同步某一位置文件和目录到另一个位置去可以使用Rsync,备份的位置可以在本地服务器或远程服务器。rsync特征速度:第一次的r...
    99+
    2023-06-28
  • 使用svg的示例分析
    这篇文章主要为大家展示了“使用svg的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“使用svg的示例分析”这篇文章吧。1、例子一css代码html,&n...
    99+
    2024-04-02
  • MySQL锁的示例分析
    这篇文章主要为大家展示了“MySQL锁的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL锁的示例分析”这篇文章吧。MySQL 锁机制1、MySI...
    99+
    2024-04-02
  • MySQL Cluster的示例分析
    MySQL Cluster的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1.背景 MySQL的cluster方案有很多官方和第...
    99+
    2024-04-02
  • MySQL中case when使用方法的示例分析
    这篇文章主要介绍了MySQL中case when使用方法的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。首先我们创建数据库表:CRE...
    99+
    2024-04-02
  • MySQL中query_cache_type参数与使用的示例分析
    这篇文章主要为大家展示了“MySQL中query_cache_type参数与使用的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中query_cache_type参数与使用的示...
    99+
    2023-06-20
  • MySQL实例crash的示例分析
    这篇文章主要介绍MySQL实例crash的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!【问题描述】我们生产环境有一组集群的多台MySQL服务器(MySQL 5.6.21),...
    99+
    2024-04-02
  • awk使用示例分析
    这篇文章主要讲解了“awk使用示例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“awk使用示例分析”吧!awk是一个强大的文本分析工具。awk其名称得自于它的创始人 Alfred Aho...
    99+
    2023-06-04
  • Node.js使用示例分析
    本篇内容介绍了“Node.js使用示例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Node.js 的非阻塞 I/OI/O 即 ...
    99+
    2023-06-17
  • mysql分表分区的示例分析
    这篇文章给大家介绍mysql分表分区的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗...
    99+
    2024-04-02
  • mysql用户管理的示例分析
    这篇文章将为大家详细讲解有关mysql用户管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。说明用户的功能是登录MySQL数据库,管理MySQL对象,通过user表查看所有用户。mysql用户帐...
    99+
    2023-06-20
  • MySQL中高可用的示例分析
    这篇文章给大家分享的是有关MySQL中高可用的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、MHA对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还...
    99+
    2023-06-20
  • 使用v-model的示例分析
    小编给大家分享一下使用v-model的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue v-model是一个指令,它提供了input和form之间或两...
    99+
    2023-06-14
  • springboot使用nacos的示例分析
    springboot使用nacos的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。pom.xml:<xml version="1.0"...
    99+
    2023-06-22
  • Linux sed使用的示例分析
    这篇文章将为大家详细讲解有关Linux sed使用的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。sed 一种流向编辑器 stream editor,是Linux中三大文件处理工具(...
    99+
    2023-06-28
  • Mysql-InnoDB锁的示例分析
    小编给大家分享一下Mysql-InnoDB锁的示例分析,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!锁类型行级锁锁模式只有LOCK_S 和LOCK_X,其他的 FLAG 用于锁的描述,如前述 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作