MySQL查询缓存机制解析:提升查询效率的利器,打造极速查询体验

发布时间: 2024-07-27 22:48:10 阅读量: 35 订阅数: 36
![MySQL查询缓存机制解析:提升查询效率的利器,打造极速查询体验](https://img-blog.csdnimg.cn/img_convert/019dcf34fad68a6bea31c354e88fd612.png) # 1. MySQL查询缓存概述 MySQL查询缓存是一种内存中的存储机制,用于存储最近执行过的查询语句及其结果。当后续查询与缓存中的查询语句完全匹配时,MySQL会直接从缓存中返回结果,而无需再次执行查询。 查询缓存的主要目的是提高查询性能,尤其是在频繁执行相同查询的情况下。通过避免重复执行查询,查询缓存可以显著减少数据库服务器的负载,从而提高应用程序的响应速度。 # 2. 查询缓存工作原理 ### 2.1 查询缓存的命中机制 查询缓存的命中机制是基于查询语句的哈希值进行的。当一个查询语句被执行时,MySQL 会将该查询语句的文本内容进行哈希计算,得到一个哈希值。这个哈希值将被用作查询缓存的键,而查询结果将被存储为查询缓存的值。 当后续有相同的查询语句被执行时,MySQL 会再次计算查询语句的哈希值。如果计算出的哈希值与查询缓存中已有的键匹配,则 MySQL 会直接从查询缓存中读取查询结果,而无需再次执行查询。 ### 2.2 查询缓存的存储结构 查询缓存是一个哈希表,其中键是查询语句的哈希值,而值是查询结果。哈希表的大小可以通过 `query_cache_size` 配置参数进行设置,默认值为 16MB。 当查询缓存达到其最大容量时,MySQL 会使用最近最少使用 (LRU) 算法来淘汰最不常用的查询结果。 **代码块 1:查询缓存存储结构** ``` typedef struct query_cache_entry { ulonglong hash; ulonglong cost; ulonglong last_access; ulonglong total_access; ulonglong lock_count; ulonglong lock_time; ulonglong total_lock_time; uchar *query; uint query_len; uchar *result; uint result_len; uchar *cache_key; uint cache_key_len; uchar *db_name; uint db_name_len; uchar *user_name; uint user_name_len; uchar *host_name; uint host_name_len; uchar *schema_name; uint schema_name_len; uchar *table_name; uint table_name_len; uchar *index_name; uint index_name_len; uchar *sql_text; uint sql_text_len; uchar *md5_hash; uint md5_hash_len; uchar *crc32_hash; uint crc32_hash_len; uchar *sha256_hash; uint sha256_hash_len; uchar *sha1_hash; uint sha1_hash_len; uchar *sha512_hash; uint sha512_hash_len; uchar *sha3_256_hash; uint sha3_256_hash_len; uchar *sha3_512_hash; uint sha3_512_hash_len; uchar *ripemd160_hash; uint ripemd160_hash_len; uchar *whirlpool_hash; uint whirlpool_hash_len; uchar *tiger_hash; uint tiger_hash_len; uchar *haval_hash; uint haval_hash_len; uchar *joaat_hash; uint joaat_hash_len; uchar *fnv1a_hash; uint fnv1a_hash_len; uchar *fnv1a_64_hash; uint fnv1a_64_hash_len; uchar *fnv1a_128_hash; uint fnv1a_128_hash_len; uchar *fnv1a_256_hash; uint fnv1a_256_hash_len; uchar *fnv1a_512_hash; uint fnv1a_512_hash_len; uchar *fnv1a_1024_hash; uint fnv1a_1024_hash_len; uchar *fnv1a_2048_hash; uint fnv1a_2048_hash_len; uchar *murmur2_hash; uint murmur2_hash_len; uchar *murmur3_hash; uint murmur3_hash_len; uchar *murmur3_128_hash; uint murmur3_128_hash_len; uchar *murmur3_32_hash; uint murmur3_32_hash_len; uchar *cityhash64_hash; uint cityhash64_hash_len; uchar *cityhash128_hash; uint cityhash128_hash_len; uchar *metrohash64_hash; uint metrohash64_hash_len; uchar *metrohash128_hash; uint metrohash128_hash_len; uchar *spookyhash128_hash; uint spookyhash128_hash_len; uchar *spookyhash256_hash; uint spookyhash256_hash_len; uchar *xxhash32_hash; uint xxhash32_hash_len; uchar *xxhash64_hash; uint xxhash64_hash_len; uchar *xxhash128_hash; uint xxhash128_hash_len; uchar *xxhash256_hash; uint xxhash256_hash_len; uchar *farmhash32_hash; uint farmhash32_hash_len; uchar *farmhash64_hash; uint farmhash64_hash_len; uchar *farmhash128_hash; uint farmhash128_hash_len; uchar *farmhash256_hash; uint farmhash256_hash_len; uchar *crc32c_hash; uint crc32c_hash_len; uchar *crc32c_zlib_hash; uint crc32c_zlib_hash_len; uchar *crc32q_hash; uint crc32q_hash_len; uchar *crc32q_zlib_hash; uint crc32q_zlib_hash_len; uchar *crc64_hash; uint crc64_hash_len; uchar *crc64_zlib_hash; uint crc64_zlib_hash_len; uchar *adler32_hash; uint adler32_hash_len; uchar *adler32_zlib_hash; uint adler32_zlib_hash_len; uchar *adler32c_hash; uint adler32c_hash_len; uchar *adler32c_zlib_hash; uint adler32c_zlib_hash_len; uchar *fletcher32_hash; uint fletcher32_hash_len; uchar *fletcher64_hash; uint fletcher64_hash_len; uchar *fletcher128_hash; uint fletcher128_hash_len; uchar *fletcher256_hash; uint fletcher256_hash_len; uchar *jenkins_hash; uint jenkins_hash_len; uchar *murmur3_32_x86_hash; uint murmur3_32_x86_hash_len; uchar *murmur3_64_x86_hash; uint murmur3_64_x86_hash_len; uchar *murmur3_128_x86_hash; uint murmur3_128_x86_hash_len; uchar *murmur3_32_x64_hash; uint murmur3_32_x64_hash_len; uchar *murmur3_64_x64_hash; uint murmur3_64_x64_hash_len; uchar *murmur3_128_x64_hash; uint murmur3_128_x64_hash_len; uchar *murmur3_32_le_hash; uint murmur3_32_le_hash_len; uchar *murmur3_64_le_hash; uint murmur3_64_le_hash_len; uchar *murmur3_128_le_hash; uint murmur3_128_le_hash_len; uchar *murmur3_32_be_ # 3. 查询缓存的优缺点 ### 3.1 查询缓存的优点 查询缓存的主要优点如下: - **提高查询性能:**对于重复查询,查询缓存可以避免数据库查询,直接从缓存中返回结果,从而显著提高查询性能。 - **减少数据库负载:**通过减少对数据库的查询次数,查询缓存可以减轻数据库的负载,提高数据库的整体性能。 - **简化应用程序开发:**查询缓存可以简化应用程序开发,因为应用程序无需考虑重复查询的优化。 ### 3.2 查询缓存的缺点 查询缓存也存在一些缺点,需要考虑: - **数据不一致:**查询缓存中的数据可能与数据库中的数据不一致,这可能会导致应用程序出现错误。 - **缓存失效:**查询缓存中的数据可能会失效,例如当数据库中的数据发生更新时。这可能会导致应用程序返回过时的结果。 - **内存消耗:**查询缓存需要消耗大量的内存,这可能会影响服务器的整体性能。 - **不适用于所有查询:**查询缓存不适用于所有查询,例如涉及到更新、删除或插入操作的查询。 - **安全性问题:**查询缓存中的数据可能会被未经授权的用户访问,这可能会带来安全风险。 ### 3.2.1 数据不一致的分析 查询缓存中的数据不一致主要是由于以下原因: - **查询语句不同:**即使两个查询语句逻辑上相同,但如果它们的语法或格式不同,查询缓存也会将它们视为不同的查询。 - **数据库更新:**当数据库中的数据发生更新时,查询缓存中的数据将失效,但查询缓存可能不会立即更新。 - **缓存失效:**查询缓存中的数据可能会由于各种原因失效,例如内存不足或服务器重启。 ### 3.2.2 缓存失效的分析 查询缓存中的数据可能会失效,原因如下: - **数据库更新:**当数据库中的数据发生更新时,查询缓存中的数据将失效。 - **查询语句不同:**即使两个查询语句逻辑上相同,但如果它们的语法或格式不同,查询缓存也会将它们视为不同的查询。 - **缓存大小:**当查询缓存达到其最大大小时,最旧的数据将被淘汰。 - **服务器重启:**服务器重启时,查询缓存中的数据将被清除。 ### 3.2.3 内存消耗的分析 查询缓存需要消耗大量的内存,其内存消耗取决于以下因素: - **缓存大小:**查询缓存的大小决定了它可以存储的数据量。 - **查询频率:**查询缓存中存储的查询越多,内存消耗就越大。 - **查询结果大小:**查询结果的大小也会影响查询缓存的内存消耗。 ### 3.2.4 不适用于所有查询的分析 查询缓存不适用于以下类型的查询: - **更新查询:**更新、删除或插入操作的查询不会被缓存。 - **存储过程:**存储过程的查询不会被缓存。 - **临时表:**使用临时表的查询不会被缓存。 - **随机函数:**使用随机函数的查询不会被缓存。 # 4. 查询缓存的配置和管理 ### 4.1 查询缓存的配置参数 查询缓存可以通过修改 MySQL 配置文件中的相关参数进行配置。主要涉及以下几个参数: | 参数 | 描述 | 默认值 | |---|---|---| | `query_cache_size` | 查询缓存大小,单位为字节 | 16 MB | | `query_cache_type` | 查询缓存类型,可选值有 `ON`、`OFF` 和 `DEMAND` | `ON` | | `query_cache_min_res_unit` | 查询缓存中最小结果单元的大小,单位为字节 | 4096 | | `query_cache_max_res_unit` | 查询缓存中最大结果单元的大小,单位为字节 | 1 MB | | `query_cache_limit` | 查询缓存中单个查询结果的最大大小,单位为字节 | 1 MB | | `query_cache_min_res_unit` | 查询缓存中单个查询结果的最小大小,单位为字节 | 4096 | | `query_cache_wlock_invalidate` | 是否在写入操作时使查询缓存无效 | `OFF` | ### 4.2 查询缓存的启动和停止 查询缓存可以通过修改 MySQL 配置文件中的 `query_cache_type` 参数来启动或停止。 - 启动查询缓存:将 `query_cache_type` 设置为 `ON`。 - 停止查询缓存:将 `query_cache_type` 设置为 `OFF`。 **示例:** ``` # 启动查询缓存 query_cache_type=ON # 停止查询缓存 query_cache_type=OFF ``` ### 4.3 查询缓存的监控 查询缓存的运行状态可以通过以下命令进行监控: ``` SHOW STATUS LIKE 'Qcache%'; ``` 该命令将输出以下与查询缓存相关的状态信息: | 状态变量 | 描述 | |---|---| | `Qcache_hits` | 查询缓存命中次数 | | `Qcache_inserts` | 查询缓存插入次数 | | `Qcache_not_cached` | 未缓存的查询次数 | | `Qcache_lowmem_prunes` | 由于内存不足而修剪的查询缓存条目数 | | `Qcache_free_memory` | 查询缓存中剩余的可用内存 | | `Qcache_total_blocks` | 查询缓存中已分配的块数 | | `Qcache_free_blocks` | 查询缓存中未使用的块数 | ### 4.4 查询缓存的优化 查询缓存的优化可以通过调整其配置参数和监控其运行状态来实现。以下是一些优化建议: - **调整查询缓存大小:**根据实际业务需求和服务器资源情况调整 `query_cache_size` 参数,以确保查询缓存既能满足查询需求,又不会占用过多内存。 - **调整查询缓存类型:**根据实际业务场景选择合适的 `query_cache_type` 参数。如果查询经常发生变化,则可以将 `query_cache_type` 设置为 `DEMAND`,以避免缓存无效。 - **监控查询缓存状态:**定期使用 `SHOW STATUS LIKE 'Qcache%';` 命令监控查询缓存的运行状态,并根据实际情况进行调整。例如,如果 `Qcache_hits` 较低,则可以考虑增加 `query_cache_size` 参数。 - **避免缓存不适合的查询:**某些类型的查询不适合缓存,例如包含 `ORDER BY` 或 `LIMIT` 子句的查询。可以通过使用 `query_cache_ignore_server_wildcards` 参数来忽略这些查询。 # 5. 查询缓存的实践应用 ### 5.1 优化查询语句 查询缓存的命中率与查询语句的质量密切相关。为了提高命中率,可以从以下几个方面优化查询语句: - **使用索引:**索引可以快速定位数据,减少查询时间。确保在经常查询的列上创建索引。 - **避免使用不必要的子查询:**子查询会增加查询的复杂性,降低命中率。如果可能,应将子查询重写为连接。 - **避免使用临时表:**临时表会绕过查询缓存,降低命中率。如果需要使用临时表,请在查询结束后立即将其删除。 - **使用合适的数据类型:**选择与数据相匹配的数据类型可以减少转换和比较操作,提高查询效率。 - **使用查询缓存提示:**MySQL提供了`SQL_CACHE`和`SQL_NO_CACHE`提示,可以强制查询使用或不使用查询缓存。 ### 5.2 避免查询缓存失效 查询缓存的失效会导致查询无法命中缓存,降低性能。为了避免查询缓存失效,可以采取以下措施: - **避免更新频繁的表:**频繁更新的表会频繁导致查询缓存失效。如果可能,将更新操作安排在非高峰时段进行。 - **使用事务:**事务可以确保数据的一致性,避免由于并发更新导致的查询缓存失效。 - **设置合适的查询缓存大小:**查询缓存大小过小会导致频繁失效,过大则会浪费内存。根据实际情况调整查询缓存大小,以达到最佳性能。 - **使用查询缓存排除规则:**MySQL提供了`query_cache_type`参数,可以指定哪些查询不使用查询缓存。对于更新频繁或不适合缓存的查询,可以将其排除在外。 **代码块:** ```sql SET query_cache_type = OFF; -- 禁用查询缓存 ``` **逻辑分析:** 该代码设置`query_cache_type`参数为`OFF`,禁用查询缓存。这可以防止所有查询使用查询缓存,从而避免因查询缓存失效而导致的性能问题。 **参数说明:** - `query_cache_type`:指定查询缓存的使用方式。可以取以下值: - `OFF`:禁用查询缓存。 - `ON`:启用查询缓存。 - `DEMAND`:仅在使用`SQL_CACHE`提示时启用查询缓存。 # 6. 查询缓存的替代方案 ### 6.1 Redis缓存 Redis是一个开源的、基于内存的、键值对数据库,具有以下优点: - **高性能:**Redis使用单线程架构,避免了多线程并发带来的性能问题,提供了极高的读写性能。 - **持久化:**Redis支持数据持久化,可以通过RDB和AOF两种方式将数据保存到磁盘,保证数据的安全性。 - **丰富的数据结构:**Redis支持多种数据结构,包括字符串、列表、哈希表、集合和有序集合,可以满足不同的数据存储需求。 **应用场景:** Redis缓存可以用于以下场景: - **会话缓存:**存储用户会话信息,提高网站的响应速度。 - **页面缓存:**存储热门页面内容,减少数据库查询的压力。 - **排行榜缓存:**存储排行榜数据,避免频繁查询数据库。 **使用方式:** 使用Redis缓存需要安装Redis服务,并配置客户端连接信息。以下是一个使用Python连接Redis的示例代码: ```python import redis # 创建Redis客户端 client = redis.Redis(host='localhost', port=6379, db=0) # 设置键值对 client.set('name', 'John') # 获取键值 name = client.get('name') # 删除键值 client.delete('name') ``` ### 6.2 Memcached缓存 Memcached是一个开源的、分布式的高速缓存系统,具有以下优点: - **高并发:**Memcached采用多线程架构,可以同时处理大量并发请求,提供极高的吞吐量。 - **分布式:**Memcached支持分布式部署,可以将数据分布在多个服务器上,提高系统的可用性和扩展性。 - **简单易用:**Memcached的API非常简单,易于使用和集成。 **应用场景:** Memcached缓存可以用于以下场景: - **页面缓存:**存储热门页面内容,减少数据库查询的压力。 - **对象缓存:**存储复杂的对象,避免频繁的数据库查询。 - **会话缓存:**存储用户会话信息,提高网站的响应速度。 **使用方式:** 使用Memcached缓存需要安装Memcached服务,并配置客户端连接信息。以下是一个使用Python连接Memcached的示例代码: ```python import memcache # 创建Memcached客户端 client = memcache.Client(['localhost:11211']) # 设置键值对 client.set('name', 'John') # 获取键值 name = client.get('name') # 删除键值 client.delete('name') ```
corwn 最低0.47元/天 解锁专栏
买1年送3月
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

LI_李波

资深数据库专家
北理工计算机硕士,曾在一家全球领先的互联网巨头公司担任数据库工程师,负责设计、优化和维护公司核心数据库系统,在大规模数据处理和数据库系统架构设计方面颇有造诣。
专栏简介
本专栏深入剖析了 MySQL 数据库查询优化和数据库运维的各个方面。它提供了 10 个秘诀来优化 MySQL 查询,指导如何分析慢查询日志以找出性能瓶颈,并揭示了查询缓存机制和查询计划的奥秘。此外,专栏还探讨了索引失效、表锁、死锁、连接池、存储过程、触发器、视图、数据备份和恢复,以及数据库性能监控和调优等重要主题。通过深入浅出的讲解和丰富的案例分析,本专栏旨在帮助读者掌握 MySQL 数据库的优化和运维技巧,提升数据库性能,保障数据安全和业务连续性,打造稳定高效的数据库系统。

专栏目录

最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

【交互特征的影响】:分类问题中的深入探讨,如何正确应用交互特征

![【交互特征的影响】:分类问题中的深入探讨,如何正确应用交互特征](https://img-blog.csdnimg.cn/img_convert/21b6bb90fa40d2020de35150fc359908.png) # 1. 交互特征在分类问题中的重要性 在当今的机器学习领域,分类问题一直占据着核心地位。理解并有效利用数据中的交互特征对于提高分类模型的性能至关重要。本章将介绍交互特征在分类问题中的基础重要性,以及为什么它们在现代数据科学中变得越来越不可或缺。 ## 1.1 交互特征在模型性能中的作用 交互特征能够捕捉到数据中的非线性关系,这对于模型理解和预测复杂模式至关重要。例如

【特征选择工具箱】:R语言中的特征选择库全面解析

![【特征选择工具箱】:R语言中的特征选择库全面解析](https://media.springernature.com/lw1200/springer-static/image/art%3A10.1186%2Fs12859-019-2754-0/MediaObjects/12859_2019_2754_Fig1_HTML.png) # 1. 特征选择在机器学习中的重要性 在机器学习和数据分析的实践中,数据集往往包含大量的特征,而这些特征对于最终模型的性能有着直接的影响。特征选择就是从原始特征中挑选出最有用的特征,以提升模型的预测能力和可解释性,同时减少计算资源的消耗。特征选择不仅能够帮助我

有限数据下的训练集构建:6大实战技巧

![有限数据下的训练集构建:6大实战技巧](https://www.blog.trainindata.com/wp-content/uploads/2022/08/rfesklearn.png) # 1. 训练集构建的理论基础 ## 训练集构建的重要性 在机器学习和数据分析中,训练集的构建是模型开发的关键阶段之一。一个质量高的训练集,可以使得机器学习模型更加准确地学习数据的内在规律,从而提高其泛化能力。正确的训练集构建方法,能有效地提取有用信息,并且降低过拟合和欠拟合的风险。 ## 基本概念介绍 训练集的构建涉及到几个核心概念,包括数据集、特征、标签等。数据集是指一组数据的集合;特征是数据

【时间序列分析】:如何在金融数据中提取关键特征以提升预测准确性

![【时间序列分析】:如何在金融数据中提取关键特征以提升预测准确性](https://img-blog.csdnimg.cn/20190110103854677.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNjY4ODUxOQ==,size_16,color_FFFFFF,t_70) # 1. 时间序列分析基础 在数据分析和金融预测中,时间序列分析是一种关键的工具。时间序列是按时间顺序排列的数据点,可以反映出某

【特征工程稀缺技巧】:标签平滑与标签编码的比较及选择指南

# 1. 特征工程简介 ## 1.1 特征工程的基本概念 特征工程是机器学习中一个核心的步骤,它涉及从原始数据中选取、构造或转换出有助于模型学习的特征。优秀的特征工程能够显著提升模型性能,降低过拟合风险,并有助于在有限的数据集上提炼出有意义的信号。 ## 1.2 特征工程的重要性 在数据驱动的机器学习项目中,特征工程的重要性仅次于数据收集。数据预处理、特征选择、特征转换等环节都直接影响模型训练的效率和效果。特征工程通过提高特征与目标变量的关联性来提升模型的预测准确性。 ## 1.3 特征工程的工作流程 特征工程通常包括以下步骤: - 数据探索与分析,理解数据的分布和特征间的关系。 - 特

p值在机器学习中的角色:理论与实践的结合

![p值在机器学习中的角色:理论与实践的结合](https://itb.biologie.hu-berlin.de/~bharath/post/2019-09-13-should-p-values-after-model-selection-be-multiple-testing-corrected_files/figure-html/corrected pvalues-1.png) # 1. p值在统计假设检验中的作用 ## 1.1 统计假设检验简介 统计假设检验是数据分析中的核心概念之一,旨在通过观察数据来评估关于总体参数的假设是否成立。在假设检验中,p值扮演着决定性的角色。p值是指在原

【PCA算法优化】:减少计算复杂度,提升处理速度的关键技术

![【PCA算法优化】:减少计算复杂度,提升处理速度的关键技术](https://user-images.githubusercontent.com/25688193/30474295-2bcd4b90-9a3e-11e7-852a-2e9ffab3c1cc.png) # 1. PCA算法简介及原理 ## 1.1 PCA算法定义 主成分分析(PCA)是一种数学技术,它使用正交变换来将一组可能相关的变量转换成一组线性不相关的变量,这些新变量被称为主成分。 ## 1.2 应用场景概述 PCA广泛应用于图像处理、降维、模式识别和数据压缩等领域。它通过减少数据的维度,帮助去除冗余信息,同时尽可能保

自然语言处理中的独热编码:应用技巧与优化方法

![自然语言处理中的独热编码:应用技巧与优化方法](https://img-blog.csdnimg.cn/5fcf34f3ca4b4a1a8d2b3219dbb16916.png) # 1. 自然语言处理与独热编码概述 自然语言处理(NLP)是计算机科学与人工智能领域中的一个关键分支,它让计算机能够理解、解释和操作人类语言。为了将自然语言数据有效转换为机器可处理的形式,独热编码(One-Hot Encoding)成为一种广泛应用的技术。 ## 1.1 NLP中的数据表示 在NLP中,数据通常是以文本形式出现的。为了将这些文本数据转换为适合机器学习模型的格式,我们需要将单词、短语或句子等元

【复杂数据的置信区间工具】:计算与解读的实用技巧

# 1. 置信区间的概念和意义 置信区间是统计学中一个核心概念,它代表着在一定置信水平下,参数可能存在的区间范围。它是估计总体参数的一种方式,通过样本来推断总体,从而允许在统计推断中存在一定的不确定性。理解置信区间的概念和意义,可以帮助我们更好地进行数据解释、预测和决策,从而在科研、市场调研、实验分析等多个领域发挥作用。在本章中,我们将深入探讨置信区间的定义、其在现实世界中的重要性以及如何合理地解释置信区间。我们将逐步揭开这个统计学概念的神秘面纱,为后续章节中具体计算方法和实际应用打下坚实的理论基础。 # 2. 置信区间的计算方法 ## 2.1 置信区间的理论基础 ### 2.1.1

大样本理论在假设检验中的应用:中心极限定理的力量与实践

![大样本理论在假设检验中的应用:中心极限定理的力量与实践](https://images.saymedia-content.com/.image/t_share/MTc0NjQ2Mjc1Mjg5OTE2Nzk0/what-is-percentile-rank-how-is-percentile-different-from-percentage.jpg) # 1. 中心极限定理的理论基础 ## 1.1 概率论的开篇 概率论是数学的一个分支,它研究随机事件及其发生的可能性。中心极限定理是概率论中最重要的定理之一,它描述了在一定条件下,大量独立随机变量之和(或平均值)的分布趋向于正态分布的性

专栏目录

最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )