我的Myqls数据库中有2个数据表,每个数据表都有超过3千万条记录,查询效率很低,有没有什麽好的办法优化?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Myqls数据库中有2个数据表,每个数据表都有超过3千万条记录,查询效率很低,有没有什麽好的办法优化?相关的知识,希望对你有一定的参考价值。

1、 如何优化数据库?
2、如何优化php代码?

首先换数据库,mysql处理这个数量级数据比较吃力。推荐你用DB2 或ORACLE

如果不能换,检查一下存储引擎用InnoDB,如果是,检查
innodb_flush_log_at_trx_commit 这个选项,是否是1
如果是1 用SET AUTOCOMMIT = 0 ,提高数据修改速度

PHP优化需要
MySQL Slow Log 分析工具分析日志:mysqldumpslow或mysqlsla比较不错。

Explain/ DESC 分析SQL 的执行情况和SHOW PROCESSLIST
使用SHOW PROCESSLIST 看是否有锁表情况,
设置 my.cnf 中的long-query-time 和log-slow-queries 记录服务器那些SQL执行速度比较慢

根据上述情况查看对对应的SQL语句进行优化

优化服务器性能,用RAID5(SAN),加内存本身的升级,提高硬盘I/O性能。

数据库总体性能优化:
数据表最好能拆成小表。
数据库切片,分到不用的服务器上,

数据库访问性能优化
修改my.cnf, 下面是影响比较大的:
innodb_flush_log_at_trx_commit 设置为0

如果比下面值大就不用调整了:
query_cache_size 设置为16M
sort_buffer_size 设置为16M
record_buffer 设置为16M
key_buffer_size 设置为8M
innodb_buffer_pool_size 设置为32M

下面是建议设置的
table_cache 设置为512
read_buffer_size 设置为16M
myisam_sort_buffer_size设置为16M
innodb_additional_mem_pool_size 设置为128M
innodb_log_file_size 设置为256M
innodb_log_buffer_size设置为8M

数据库表优化,
1 建立相应的INDEX
2 统一编码,MySQL的默认编码是Latin1,不支持中文,需要把数据库的默认编码修改为gbk或者utf8
show variables like 'character%' 查看

另外表的编码也要与数据库统一
参考技术A 1.适度的正规化,分表的优先目标是把字符串多的栏位分出来
2.再搭配索引
3.查询前使用LOCK TABLES,查完sql记得再加上UNLOCK TABLES

参考资料:me

参考技术B 1.两个表要建相关的查询条件的索引.要及时清理不需要的数据.就是备份走以前的数据.不要一直不管它.这样很危险.另外这个和机器的配置也有关系的.如硬盘速度.
建议还是备份走以前的数据.建索引.
2.代码其实没有什么要优化的只要写的差不多.就没有什么问题.
参考技术C 创建索引;hibernate的分页查询;查询结果建立缓存;

2个数据集的标准偏差(每个都有标准偏差)

【中文标题】2个数据集的标准偏差(每个都有标准偏差)【英文标题】:Standard Deviation of 2 Datasets (Each Having Standard Deviation) 【发布时间】:2021-10-16 20:51:09 【问题描述】:

假设我有 2 个数据集(每个数据集都是一组值,每个都有一个标准偏差)。

我想找到两个数据集元素之间的平均差异,例如((element1_set1 - element1_set2) + (element2_set1 - element2_set2)) / 2 用于两个长度为 2 的数据集。

这是否意味着我必须逐元素添加标准差,然后找到它们的平均值以获得整体标准差?

还是只求数组的均值和标准差,[element1_set1 - element1_set2, element2_set1 - element2_set2]?

【问题讨论】:

【参考方案1】:

我真的不明白你为什么在其中混入标准差。

要获得均值差,您只需减去均值即可。 这是因为以下原因(假设 x 是第一个数据集的元素,y 是第二个数据集的元素):

但这不适用于标准差,因为有平方。

【讨论】:

感谢您的回复。我真的很困惑,好像有多个标准偏差,我们必须包括所有。但是,如果标准差是由同一类型的错误引起的,我们是否不必包括它们? 关于标准差我想说的是:创建包含差异的第三个数据集。取新数据集的标准差。我认为这是最好和最直接的方式。忽略您为数据集 1 和 2 计算的标准差。 我明白了,谢谢。那么你可以只使用最终数据集的标准,因为只有一个错误来源吗?如果有多个,您是否必须考虑每个单独集合的标准? 不,据我所见。差异数据集的标准偏差将包含两个数据集差异中存在的所有变化。

以上是关于我的Myqls数据库中有2个数据表,每个数据表都有超过3千万条记录,查询效率很低,有没有什麽好的办法优化?的主要内容,如果未能解决你的问题,请参考以下文章

2个数据集的标准偏差(每个都有标准偏差)

根据来自 2 个不同命中级别数据 Bigquery 的值选择 VISITID

java中引用数据类型都有哪些?

同一个 .net 解决方案中的多个 edmx

如何从mysql数据库中获取添加到页面的项目,每个项目都有一个复选框?

Oracle 数据库性能相关