数据库优化策略+SQL文复习

Posted 亮哥的IT职场

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库优化策略+SQL文复习相关的知识,希望对你有一定的参考价值。

数据库优化的思路:

1:优化sql

2:添加索引

3:加缓存,如memcached

4:主从复制或主主复制,读写分离

5:分区

6:垂直切分

垂直切分就是要把表按模块划分到不同数据库中,这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断丰富和壮大的时候,也会变成多个子系统来支撑,这时就有按模块和功能把表划分出来的需求。

7:水平切分

上面谈到垂直切分只是把表按模块划分到不同数据库,但没有解决单表大数据量的问题,而水平切分就是要把一个表按照某种规则把数据划分到不同表或数据库里。例如像计费系统,通过按时间来划分表就比较合适,因为系统都是处理某一时间段的数据。而像SaaS应用,通过按用户维度来划分数据比较合适,因为用户与用户之间的隔离的,一般不存在处理多个用户数据的情况。



接下来复习几个sql文的注意事项:


1:count(expr)

count(column) 和 count(*) 是一个完全不一样的操作,所代表的意义也完全不一样

count(column) 是表示结果集中有多少个column字段不为空的记录

count(*) 是表示整个结果集有多少条记录


2:字符串拼接

(1)SELECT * FROM book WHERE isbn = '1464540496384'

(2)SELECT * FROM book WHERE isbn =  CONCAT('146454049638','4')

(3)SELECT * FROM book WHERE isbn =  ('146454049638'+'4')

第一个sql跟第二个sql是相同的效果。


SELECT ('146454049638'+'4') from DUAL //146454049642


2:当只要一行数据时使用limit 1

mysql数据库引擎会在找到一条数据后停止搜索,而不是继续往后查找下一条符合记录的数据。

SELECT * FROM book WHERE isbn = '1464540496384';         //0.060s

SELECT * FROM book WHERE isbn = '1464540496384' limit 1; //0.024s



3、避免SELECT *

从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。所以,你应该养成一个需要什么就取什么的好的习惯。


SELECT id,Name from book;  //0.090s

SELECT * from book;        //0.145s



4.批量插入效率高于逐条插入

insert into book (NAME,AUTHOR,CATEGORY_ID,ISBN) VALUES('java','tom',2,'123456'); //0.074

insert into book (NAME,AUTHOR,CATEGORY_ID,ISBN) VALUES('javascript','lili',2,'7891011'); //0.076

insert into book (NAME,AUTHOR,CATEGORY_ID,ISBN) VALUES('c++','lulu',4,'789234'); //0.067


insert into book (NAME,AUTHOR,CATEGORY_ID,ISBN) VALUES('java','tom',2,'123456'),

('javascript','lili',2,'7891011'),

('c++','lulu',4,'789234');    //0.065


Java知识平台

ID:bright_beijing


▲长按二维码“识别”关注

简介: 图片记录人生足迹,文字感悟生命真谛,每日发送美图、美文,只发精华,拒绝糟粕!

以上是关于数据库优化策略+SQL文复习的主要内容,如果未能解决你的问题,请参考以下文章

一篇文章带你搞懂慢SQL以及优化的策略

数据库优化:52 条 SQL 语句性能优化策略,果断收藏!

数据库性能优化策略

52 条 SQL 语句性能优化策略,建议收藏!

52 条 SQL 语句性能优化策略,建议收藏!

SQL索引的原理及优化策略