微信号:imooc-com

介绍:慕课网是一个超酷的互联网、IT技术免费学习平台,创新的网络一站式学习、实践体验;服务及时贴心,内容专业、有趣易学。专注服务互联网工程师快速成为技术高手!

【学习总结】设计数据库及数据库的语句优化(MySQL)

2017-06-09 07:53 中华edw


图 | 来源网络

文 | 中华edw


如何更好的写数据库?如何数据库语句优化?

如下我给大家简单介绍一下~~


| 在数据库表设计方面

在设计数据库的时候我们总要设计一些冗余字段~~为啥呢?
个人想法应该是有一些查询,冗余字段可以帮助我们不需要去联多表查询。
于是乎你就可以做一些冗余字段了, 比如说评论数量。
虽然说评论数量是可以从评论表里算出来的(在评论时做个触发器也不错,少查询一个表)。


| 设置删除状态字段:

尽量少用delete语句,这个语句在操作的时候会锁表,以后直接用update;
况且如果使用这个语句也会对数据产生一些问题,还是不要删了。

字段上面最好不要用null做默认值~~

做合理的索引~大量的索引只会似的插入数据缓慢

类型字段建议采用tinyint
字符类型如下解释
varchar内存占用率小
char效率高(固定大小的字符串最好用这个存)


主键大部分都喜欢用 int,估计大家都没有过无符号的int(因为主键是非负数,用这个的话主键量可以达到2倍哦~23333333)



| mysql和redis结合:

举个栗子:比如说点赞,这个是频繁的操作,频繁的有好多点赞狂,2333333



| 把在redis中存储点赞信息:
返回json时再和文章数据做整合,效率提高数倍;
尝试对一些经常不动的数据进行缓存处理。


| 在数据库语句方面:
在使用select语句的时候尽量多些字段,如果用*的话效率好低地说
查询数量的时候 尽量使用 count(1)这种样子
查询一条语句的时候最好在后面加上 limit 1 这样的话数据库查询到一条的话就停止了


| 如何进行快速插入呢?
insert into user(name) values(‘m’);
insert into user(name) values(‘n’);
拼接成如下语句
insert into user(name) values(‘m’), (‘n’);
效率会翻好几倍
如果能用inner join尽量使用,这个效率最高


| 如下是其他博客里学习到的


在查询的时候尽量不要用到 null判断 这样会导致数据库不用索引,去全表扫描,效率很低;


应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描;


应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描


select id from t where num=10 or Name = 'admin'
可以这样查询:
select id from t where num = 10 union all select id from t where Name = 'admin'


in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)


对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3


很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’




  推荐相关MySQL实战教程




1.《MySQL性能管理及架构设计》


这门课程中从各个方面来为大家讲解MySQL入门所要了解的知识,从系统到MySQL数据库本身,从数据设计到高可用架构可以说涉及到了MySQL的方方面面,决对是MySQL入门和提高的首选。



2. 《MySQL数据库设计及架构优化 电商项目》


相比于上一门课程,这门课以一个电商项目为基础,为大家详细的讲解了在一个具体项目中在数据库设计和架构所要面临的问题和解决之道,相信你同样会收获满满。


写在最后


通过这两门课程的学习,大家一定会对MySQL有一个全面而完整的认识。也会知道自己的知识短板在那里,后面就可以针对我们的知识短板来进行进一步的学习。


再次,我们还要多多的在工作中进行实践,虽然我们的实践课程已经尽力的在模拟真实的环境了,但还是无法和自己在工作中的实践一样,只有能过自己的实际工作才能积累经验和快速的掌握相关的知识。

最后,就是要关注MySQL的新的动向,多多参考MySQL手册,有事没有读读MySQL手册决对是了解MySQL的最佳选择。







下方“阅读原文”,数据库实战合辑等你学

 
慕课网 更多文章 【云栖专题——阿里百川技术分享】后APP时代的破局之路:阿里技术“三大容器五大方案”亮相,百川开放全面升级 做一次真实的开发,一次性拿下jQuery!转需~ 第一门Android实战课火爆上线!丨【新课速递】 学习之道 | 学习不是枯燥的劳作,是精彩的冒险(评论区留言送书啦!) 抽奖 | 双11实战大狂欢,“肾7”、iPad都给你准备好了!
猜您喜欢 用 Codable 协议实现快速 JSON 解析 谷歌公司正努力将VR浏览方式引入每个网站 深度|智能客服为网商银行节约50%坐席的背后,有何技术奥秘? Folly源码分析系列(一) — ThreadLocalPtr 高考招录在即,网络诈骗手段要看清!特辑(下)