`

数据库使用经验谈之3点:架构,NULL值,索引与查询

阅读更多
小型项目对于数据库的使用往往比较随意,过多的考虑分库分表等策略对于相当多数没有海量数据需要存储到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

    在设计时,应根据实际需求和业务场景选择适当的索引策略,例如,对逻辑主键使用唯一聚集索引,对系统键使用唯一非聚集索引,对外键列使用非聚集索引。 此外,对于包含多个部分的字段,如case number,可以将其分解...

    2010计算机三级数据库经验谈:选择键和索引汇编.docx

    本文主要分享了关于2010年计算机三级数据库考试中的经验,涉及到选择键和索引的一些关键点。 首先,设计数据库时需要考虑到数据挖掘的需求。在处理大量数据时,如8万多份联系信息,应该在初始设计阶段就规划好表和...

    数据库设计经验谈 数据库设计经验 数据库设计经验总结谈

    ### 数据库设计经验总结 #### 一、设计数据库之前的准备 **1.1 考察现有环境** 在设计新数据库之前,深入了解当前环境是非常重要的一步。这包括但不限于研究现有系统的架构、流程以及存在的问题。大多数情况下,...

    数据库设计经验谈,比较详细的数据库设计经验(doc文档),

    除了以上四部分,还有一些小技巧能优化数据库设计,如使用视图简化复杂查询,使用存储过程封装常用操作以提高效率,使用触发器确保数据的一致性。同时,保持数据库设计的灵活性,允许随着业务发展进行调整和扩展。 ...

    数据库优化经验谈

    ### 数据库优化经验谈 #### 一、查询语句(SELECT)优化建议 1. **合理使用索引** - 在WHERE子句中确保变量的顺序与索引关键字的顺序一致,以便最大化利用索引的优势。例如,如果索引为`create index test_idx ...

    计算机等考三级数据库辅导:谈索引使用的误区.docx

    【计算机等考三级数据库辅导:谈索引使用的误区】 在数据库设计中,索引是一种重要的优化工具,用于加速数据检索。然而,对于索引的使用,存在一些常见的误区,这可能会导致性能下降而非提升。本文将探讨这些误区,...

    数据库设计经验谈.pdf

    ### 数据库设计经验谈 #### 第一部分:设计数据库之前 **1. 考察现有环境** - **重要性**:在着手设计新的数据库之前,深入理解现有的业务环境和技术架构至关重要。 - **方法论**:这包括但不限于研究现有的业务...

    数据库设计经验谈

    ### 数据库设计经验谈 在IT领域,数据库设计是一项至关重要的技能,它直接影响到数据的存储效率、查询性能以及系统的可扩展性。本文将深入探讨数据库设计中的关键知识点,包括但不限于设计原则、实体关系(ER)图...

    华为架构师8年经验谈:从单体架构到微服务的服务化演进之路(李林锋 DBAplus社群)

    根据提供的文件信息,以下是对华为架构师李林锋在DBAplus社群分享的“从单体架构到微服务的服务化演进之路”中涉及知识点的详细解析。 ### 传统应用开发面临的挑战 #### 研发成本高 传统应用开发面临的主要挑战之...

    2011年DTCC数据库大会ppt下载

    浅谈伪分布式数据库架构_金官丁_20110328.pdf 汪富强: DSG数据库复制和备.pdf 张瑞: Database和SSD的实践与探索-IT168数据库大会_公开.pdf 崔华:数据安全与恢复机制揭密.pdf 百度数据库优化实践-李京生_公开版.pdf ...

    数据库设计之——数据库设计经验谈

    ### 数据库设计之——数据库设计经验谈 在当今数字化时代,数据成为了企业运营的重要组成部分,而数据库则是管理和存储这些数据的核心工具。一个优秀的数据库设计能够极大地提升系统的性能、可靠性和可扩展性。本文...

    SQLServer索引设计经验谈

    ### SQL Server索引设计经验谈 #### 摘要 本文旨在探讨Microsoft SQL Server中的索引设计技巧,尤其是如何通过合理的索引策略来优化查询性能。通过对聚集索引与非聚集索引的选择、索引列的排序方式、填充因子的...

    数据库设计经验谈.doc

    在数据库设计领域,经验和理论同样重要。本文将探讨五个关键部分,帮助你提升数据库设计的效率和质量。 **第 1 部分 - 设计数据库之前** 在开始设计数据库之前,首先要对现有的环境进行深入的考察。这包括分析现有...

    来自阿里的greenplum数据库经验谈

    《来自阿里的Greenplum数据库经验谈》 在大数据时代,高效的数据库管理是企业核心竞争力的重要组成部分。Greenplum作为一款强大的并行数据库系统,因其出色的数据仓库性能和大规模数据处理能力,在业界得到了广泛的...

    浅谈分布式数据库架构.pdf

    分布式数据库架构是一种先进的数据存储和管理技术,其目的是为了适应信息化时代对数据存储技术的高要求。在传统数据库架构中,数据集中存储在单一服务器上,这不仅会导致数据访问速度慢,而且在系统出现故障时,会...

Global site tag (gtag.js) - Google Analytics