小型项目对于数据库的使用往往比较随意,过多的考虑分库分表等策略对于相当多数没有海量数据需要存储到db的应用又显得浪费。那么如何避免,特别是当数据库压力比较小的开发初期,db架构方面的问题,我想遵循几个简单的原则就可以。从应用架构的角度,项目中最常见的问题有三种:如何使用数据库,NULL值,索引与查询。
一,如何使用数据库
1,围绕数据库的使用方式也决定架构如何。正如“MySQL数据库开发的三十六条军规”开篇所说:
•别让脚趾头想事情
•那是脑瓜子的职责
•让数据库多做她擅长的事:
尽量不在数据库做运算
复杂运算秱到程序端CPU
尽可能简单应用MySQL
这么简单的道理,却曾在项目里被argue很多次。理由是数据库中进行逻辑处理,任何过程通过query db便可见,利于debug和测试。事实证明这是一种错误的思路,虽然得了小利却在系统扩展性和性能上吃了大亏,是失败的构架。
2,设计表结构时多用数值列,比如ip就可用整数而不是字符列表示;
二,查询
一般不推荐使用复杂的查询,且如果你的架构合理,应该是少查少写。
1,可以的话,不要使用select *样式的SQL。原因是DBMS会将“*”依次转换成所有的列名,需要查询数据字典,耗费资源;
2,充分利用主键列或者索引列,这里引用一个数据加以说明:
MySQL> select sql_no_cache * from post limit 80000,10;
10 rows in set (0.58 sec)
MySQL> select sql_no_cache id from post limit 80000,10;
10 rows in set (0.02 sec)
3,对于mysql,少用子查询,而多用join;比如减少使用:
select * from table1 where id in (select id from table2);
三,索引与null值
1,索引不是越多越好,建立索引应充分考虑其需求。
2,如有null的列,最好不建立索引,因null值不放入索引,使得全表扫描的几率变大。至于是否加入默认值替代null,则要估计应用数据中null值有多少。这里有篇博文http://space.itpub.net/17203031/viewspace-692784写得非常详细,推荐大家去看)
3,另有一种说法是mysql只使用多个索引中的一个,这是不对的。mysql是否使用多个索引主要是根据查询的方式决定。推荐这篇文章,比较详细:http://hi.baidu.com/wangxinhui419/blog/item/f22ee343cfd9f90672f05d06.html
另附上“MySQL数据库开发的三十六条军规”以方便大家参考mysql中的其他有趣规则。
分享到:
相关推荐
2010计算机三级数据库经验谈:选择键和索引.docx
2010计算机三级数据库经验谈:选择键和索引汇编.docx
数据库设计经验谈 数据库设计经验谈 数据库设计经验 数据库设计经验总结
数据库优化经验谈
华为架构师8年经验谈:从单体架构到微服务的服务化演进之路 本次分享的大纲如下: 传统应用开发面临的挑战 服务化实践 服务化不是银弹 服务化架构的演进方向
浅谈伪分布式数据库架构_金官丁_20110328.pdf 汪富强: DSG数据库复制和备.pdf 张瑞: Database和SSD的实践与探索-IT168数据库大会_公开.pdf 崔华:数据安全与恢复机制揭密.pdf 百度数据库优化实践-李京生_公开版.pdf ...
数据库设计经验谈
数据库优化经验谈,一些经验,如查询时要注意的问题,和建表时要注意的问题,欢迎指教
数据库设计经验谈.doc
计算机等考三级数据库辅导:谈索引使用的误区.docx
数据库设计经验谈.pdf
比较详细的数据库设计经验(doc文档),对于即将毕业设计的同学看过来。。。一共十页
高性能数据库搜索经验谈之 营销短信发送 1.数据结构优化 2.数据索引优化 3.数据查询语句优化
数据库设计经验谈全文共11页,当前为第1页。一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成, 而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。 如果把企业...
一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计...
数据库物理设计经验谈 我们无论使用哪种数据库,无论怎样设计数据库,我想都会遵从一个原则:数据安全性和性能高效这两个主要方面,但是关于这两个方面的话题太多,在这里就不一一陈述,我只是从数据库物理分布设计...
来自阿里的greenplum数据库经验谈