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万行,由于缺乏处理大数据的额 ...
随机推荐
- linux yum配置代理
yum里面可以单独设置代理就是yum源的参数加proxy=“http://ip:PORT”即在/etc/yum.conf中加入下面几句.proxy=http://210.45.72.XX:808pro ...
- [Go] golang缓冲通道实现管理一组goroutine工作
通道1.当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道2.无缓冲通道和有缓冲通道,make的第二个参数就是缓冲区大小3.无缓冲通道需要发送和接收都准备好,否则 ...
- JAVA程序员面试30问(附带答案)
第一,谈谈final, finally, finalize的区别. 最常被问到.final修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能 ...
- Java开发笔记(十八)上下求索的while循环
循环是流程控制的又一重要结构,“白天-黑夜-白天-黑夜”属于时间上的循环,古人“年复一年.日复一日”的“日出而作.日落而息”便是每天周而复始的生活.计算机程序处理循环结构时,给定一段每次都要执行的代码 ...
- Java开发笔记(三十二)字符型与整型相互转化
前面提到字符类型是一种新的变量类型,然而编码实践的过程中却发现,某个具体的字符值居然可以赋值给整型变量!就像下面的例子代码那样,把字符值赋给整型变量,编译器不但没报错,而且还能正常运行! // 字符允 ...
- Java开发笔记(四十一)日历工具Calendar
前面的文章提到,Date是Java最早的日期工具,估计当时的设计师是个技术宅男,未经过充分调研就拍脑袋写下了Date的源码,造成该工具存在先天不足,比如getYear方法返回的不是纯正的公元纪年.ge ...
- WordPress在Centos下Apache设置伪静态方法
1.设置httpd.conf文件 1.1 添加或取消注释这段代码 LoadModule rewrite_module modules/mod_rewrite.so 1.2 运行httpd -M查看这个 ...
- MongoDB分片 在部署和维护管理 中常见事项的总结
分片(sharding)是MongoDB将大型集合分割到不同服务器(或者说集群)上所采用的方法,主要为应对高吞吐量与大数据量的应用场景提供了方法. 和既有的分库分表.分区方案相比,MongoDB的最大 ...
- 获取spring security用户相关信息
在JSP中获得 使用spring security的标签库 在页面中引入标签 <%@ taglib prefix="sec" uri="http://www.spr ...
- 解决Linux系统下Mysql数据库中文显示成问号的问题
当我们将开发好的javaWEB项目部署到linux系统上,操作数据库的时候,会出现中文乱码问题,比如做插入操作,发现添加到数据库的数据中文出现论码,下面就将解决linux下mysql中文乱码问题! 打 ...