mysql千万级数据优化查询
我们在做一个项目,一个网站或一个app时,用户量巨增,当使用的mysql数据库中的表数据达到千万级时,可以从以下方面考滤优化:
1、在设计数据库表的时候就要考虑到优化
2、查询sql语句上的优化
3、从数据库设计上进行结大框架的设计:如分区、分表、分库
1、在设计数据库表的时候就要考虑到优化
1、尽可能使用not null定义字段,避免null值字段出现,null值会占用额外的索引空间
2、使用固定长度的字段类型如char而不是varchar
3、添加索引,在查询频繁的字段上加索引,如在where,group by, order by,on中出现的字段加索引
4、字符字段只建立前缀索引,字符字段最好不要做主键
2、查询sql语句上的优化
1、不要使用select * 查询,将要查找的字段写出来
2、使用join来代替子查询
3、使用limit 对查询结果的记录进行限定,千万级别的数据太多,后面的数据没必要查出来
4、OR改写成IN:因为OR的效率是n级别,IN的效率是log(n)级别
5、少使用触发器和函数,可在应用程序代码实现
6、也尽量少用join
7、尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
8、列表数据不要拿全表的数据,要使用limit 来分页
来说说MySql的引擎:
目前广泛使用的是MyISAM和InnoDB两种引擎:
MyISAM引擎,MySQL5.1之前版本默认引擎,它的特点是:不支持行锁,不支持事务,不支持外键
InnoDB引擎,MySQL5.5后默认引擎,它的特点:支持行锁,采用MVCC来支持高并发,支持事务,支持外键,不支持全文索引
分区:
分区我不太明白,没怎么看懂
分表:
分表就是把一张超多数据的表,分成多张表,把一次查询,分成多次查询,然后把结果组合返回给用户。
分表:又有两种方式,分为垂直拆分和水平拆分,通常以某个字段做拆分项,比如以id字段拆分为100张表:表名为tableName_id%100
分表只适合开发初期做好分表处理,不适合应用上线后再做修改,成本太高。
分库:
分库:就是把一个数据库分成多个,然后做读写分离。
有钱的话,使用其他方法,阿里云数据库POLARDB,阿里云OcenanBase (淘宝使用,扛得住双十一),阿里云HybridDB for MySQL (原PetaData) ,腾讯云数据库:腾讯云DCDB等等
另一种情况:数据量过亿
数据量过亿只能使用传说中的大数据了。(做了这么多年开发,从来没接触过这玩意,可能都没进什么大公司的原因吧)
hadoop家族,(具体怎么玩的暂时还不知道)
。。。
mysql千万级数据优化查询的更多相关文章
- mysql千万级数据量查询出所有重复的记录
查询重复的字段需要创建索引,多个条件则创建组合索引,各个条件的索引都存在则不必须创建组合索引 有些情况直接使用GROUP BY HAVING则能直接解决:但是有些情况下查询缓慢,则需要使用下面其他的方 ...
- (转载)MYSQL千万级数据量的优化方法积累
转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...
- 通用技术 mysql 亿级数据优化
通用技术 mysql 亿级数据优化 一定要正确设计索引 一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的 > < != 等等之类的写法都会导致全表扫描) 一定要避免 lim ...
- DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化、SQL优化方法
ylbtech-DB-SQL-MySQL-杂项-调优:Mysql千万以上数据优化.SQL优化方法 1.返回顶部 1. 1,单库表别太多,一般保持在200以下为宜 2,尽量避免SQL中出现运算,例如se ...
- MySQL 千万 级数据量根据(索引)优化 查询 速度
一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...
- mysql千万级数据量根据索引优化查询速度
(一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...
- MYSQL千万级数据量的优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- MySQL千万级数据分区存储及查询优化
作为传统的关系型数据库,MySQL因其体积小.速度快.总体拥有成本低受到中小企业的热捧,但是对于大数据量(百万级以上)的操作显得有些力不从心,这里我结合之前开发的一个web系统来介绍一下MySQL数据 ...
- Mysql千万级数据删除实操-企业案例
某天,在生产环节中,发现一个定时任务表,由于每次服务区查询这个表就会造成慢查询,给mysql服务器带来不少压力,经过分析,该表中绝对部分数据是垃圾数据 需要删除,约1050万行,由于缺乏处理大数据的额 ...
随机推荐
- WCF消息交换模式之请求-响应模式
WCF的消息交换模式(MEP)有三种:请求/响应.单向模式和双工模式.WCF的默认MEP是请求/响应模式. 请求/响应模式操作签名代码如下,无需指定模式,默认就是. [OperationContrac ...
- 【Spring】6、注解大全
一.@interface Java用 @interface Annotation{ } 定义一个注解 @Annotation,一个注解是一个类. 二.@Override,@Deprecated,@S ...
- C# 消息队列-Microsoft Azure service bus 服务总线
先决条件 Visual Studio 2015或更高版本.本教程中的示例使用Visual Studio 2015. Azure订阅. 注意 要完成本教程,您需要一个Azure帐户.您可以激活MSDN订 ...
- php设计模式--简单介绍
鉴于最近有几个小伙伴总问一些设计模式相关的东西,本人借鉴了一些东西,准备将常见的几种php的设计模式总结整理出来. 平时我们用到的设计模式很多,建议大家多多读一些php开源框架,当深入的阅读了一些ph ...
- prufer序列笔记
prufer序列 度娘的定义 Prufer数列是无根树的一种数列.在组合数学中,Prufer数列由有一个对于顶点标过号的树转化来的数列,点数为n的树转化来的Prufer数列长度为n-2. 对于一棵确定 ...
- LEDAPS1.3.0版本移植到windows平台----HuPm参数初始化模块
这个是2012年左右放在百度空间的,谁知百度空间关闭...转移到博客园. 最近项目用到3.1.2版本的LEDAPS,新版本的使用情况会在后续文章中慢慢丰富. LEDAPS的调用顺序是:HuPm--&g ...
- 支持scrollTo的RecycleView
RecycleView内部没有帮我们实现ScrollTo的方法,不过帮我们实现了ScrollBy,我们可以通过ScrollBy自定义一个支持scrollTo的RecycleView. public c ...
- 测者的测试技术笔记:揭开java method的一个秘密--巨型函数
相信,很多人都不知道Java的Method的上限为64K.本文将超过这个上限的函数叫做巨型函数. 巨型函数的问题 1.如果代码超过了这个限制,Java编译器就报"Code too large ...
- 06-Nodejs介绍
06-Nodejs介绍 打开Nodejs英文网:https://nodejs.org/en/ 中文网:http://nodejs.cn/ 我们会发现这样一句话: 翻译成中文如下: Node.js 是一 ...
- 高版本Sqlserver数据库导入低版本Sqlserver
今天想跑一个关于java网站的demo,结果在附加数据库项这一块出现问题,例程的数据库用的是sqlserver2014,而我的是2008,添加数据库出现错误.经过一番查找,也找到某人写的一些博客上的解 ...