我的Myqls数据库中有2个数据表,每个数据表都有超过3千万条记录,查询效率很低,有没有什麽好的办法优化?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的Myqls数据库中有2个数据表,每个数据表都有超过3千万条记录,查询效率很低,有没有什麽好的办法优化?相关的知识,希望对你有一定的参考价值。
1、 如何优化数据库?
2、如何优化php代码?
如果不能换,检查一下存储引擎用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 个不同命中级别数据 Bigquery 的值选择 VISITID