千万级别数据的mysql数据表优化
作者:网络转载 发布时间:[ 2016/7/27 10:20:00 ] 推荐标签:数据库 MySQL
垂直分表
对于一张很大的数据表,比如user表,username,password,age等字段是经常被使用到的字段,可以放在一张表中,表中其他不太常用的字段(不会拿来当作查询条件的字段),如person_info,profile等可以拿出到一张单独的表中进行存储,这样可以保证主表在数据量很大的时候性能下降不会太严重。
架构层
1.配置mysql集群,完成数据的读写分离
基本原理:1.master记录自己改变了的记录的二进制文件(binlog),在每个事务执行完毕之后,将这些改变记录在二进制文件中;2.在slave上存在两个进程:读取master上的二进制文件到自己的中继文件中,在中继文件中读取更新的事件内容并同步到自己的数据库中
可以使用mysql官方提供的代理层产品完成MysqlProxy相关的功能:https://segmentfault.com/a/11...
sql语句层进行优化 从给定的题目出发
字段:在进行数据的查询的时候,在查询字段的选择上,使用 对应的字段代替 select *
条件:在sql语句的条件的书写的时候,条件的排列顺序应该是以字段上的数据差异性较大的列排列在左端,也是能够区分出更少数据的列优先排列在左端。比如说在常规的业务逻辑下,age字段应该在sex 字段的左侧
分页:在后台的数据进行分页的时候,每页显示150条数据,在查看10000页的数据的时候肯定会很慢,使用 where id > 1500000 limit 150的写法代替 limit 10000,150 .这样可以极大的提高查询的速度
在只查询一条数据的时候,使用limit 1,这样mysql在进行搜索的时候,找到了一条数据不会在乡下进行搜索
子查询:在执行一条资查询:select ... from t1 where t1.uid IN (select uid from t2 ),这条子查询相当于select ... from t1 where exists(select 1 from t2 where t2.uid=t1.id).这样一来相当于将两个结果集中的数据做乘法,相比于连接查询,速度会很慢
连表查询:将复杂的联表sql语句改写成针对于单表的sql查询语句
注意数据的饮食转换。比如说查询的字段的类型为varchar,那么在写where条件的时候,where name='11' 会比 where name=11更快,因为传入的字段类型是int,会导致程序进行全表扫描
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南