background image

此外,请注意 PHP 循环中的 SQL 查询。通常来说,执行一个查询比在结果中迭代更有效
率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些 SQL 的知识将大有裨益。
6、没有优化数据库查询
99%的 PHP 性能问题都是由数据库引起的,仅仅一个糟糕的 SQL 查询就能让你的 web 应
用彻底瘫痪。MySQL 的 EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助
你找出这些万恶的 SELECT。
7、不能正确使用数据类型
MySQL 提供了诸如 numeric、string 和 date 等的数据类型。如果你想存储一个时间,那么使
用 DATE 或者 DATETIME

 

类 型。如果这个时候用 INTEGER 或者 STRING 类型的话,那么

将会使得 SQL 查询非常复杂,前提是你能使用 INTEGER 或者 STRING

 

来定义那个 类型。

很多人倾向于擅自自定义一些数据的格式,比如,使用 string 来存储序列化的 PHP 对象。
这样的话数据库管理起来可能会变得简单些,但会使得 MySQL 成为一个糟糕的数据存储
而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就
算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select 语句中的任何一个 where 子句表示的字段都应该使用索引。

 

举 个例子,假设我们有一个 user 表,包括 numeric ID(主键)和 email address。登录的时候
MySQL 必须以一个 email 为依据查找正确的 ID。如果使用了索引的话(这里指 email),那
么 MySQL

 

就能够使用 更快的搜索算法来定位 email,甚至可以说是即时实现。否则,

MySQL 就只能顺序地检查每一条记录直到找到正确的 email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了 INSERT 或者 UPDATE 之后这些
索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃 ,
web 主机提供商有可能会破产!丢失 MySQL 数据将会是灾难性的,所以请确保你已经使
用了自动备份或者已经复制到位。
11Bonus mistake-不考虑使用其他数据库
对于 PHP 开发人员来说,MySQL 可能是使用最广泛的数据库系统,但并不是唯一的选择。
PostgreSQL 和 Firebird

 

是最强有力的 竞争者:这个两者都是开源的,而且都没有被公司

收购。微软提供了 sql server Express,甲骨文提供了 10g Express,这两者都是企业级数据
库的免费版本。有时候,对于一个较小的 web 应用或者嵌入式应用,SQLite 也不失为一个
可行的替代方案。