`

PHP开发者常犯的10个MySQL错误

 
阅读更多

容陈旧,随着时间推移技术发展变化而变得不适用。为了防止误导新手,特本着与时俱进的精神写出此文,绝非对原文作者的不尊重。

1.使用MyISAM而不是InnoDB
完全错误,反驳理由:
首先原文说MyISAM是默认使用的,而实际上到了MySQL 5.5.x,InnoDB已经成为了默认的表引擎。

另外,简单的使用InnoDB不是解决所有问题的方法,盲目的使用甚至会使应用性能下降10%乃至40%。

最佳方法还是针对具体业务具体处理,例如论坛中版块表,新闻分类表,各种码表等长时间不操作的表,还是要用性能优异的MyISAM引擎。
而需要用到事务处理的例如用户、账目、流水等严格要求数据完整性和时序性的,则需要用InnoDB引擎,并且应用也要用好事务处理机制。当然,事务处理必然要带来大量的性能损耗,但是这在简单高并发应用上是必须的。

最后,外键约束在公共web互联网应用上一般是不用的,因为他会严重影响性能。数据完整性还是靠程序员或者应用架构本身的健壮来维护。而正规的第三范式只是在企业内部MIS系统和12306这种网站上使用。

2.使用PHP的mysql方法
不完全错,但要酌情选用:
mysqli固然好,但是不是所有的服务器都为PHP编译了mysqli的支持。
当你的应用如果是能确定只用自己部署的服务器,而应用也是完全自己开发,则mysqli是最好的选择。
但是一旦你的应用有可能部署在虚拟主机或者由其他人部署(例如分布式项目),还是老老实实使用mysql函数集吧,好好封装一下或者使用成熟框架杜绝sql注入。

3.不过滤用户输入
这一点不用说了,要么MagicQuote,要么选用成熟框架。sql注入老话题了。

4.不使用UTF-8
大部分情况下对,但也要认真考虑:
要知道,一个UTF-8字符占3个字节,所以比GBK等其他编码的文件大33%。换句话说,相同的网页用UTF-8编码如果是100KB,那么换成GBK编码则只有66KB。所以即便你的PHP确定要用UTF-8,那么前端页面也要根据情况选择需要的编码。但是,如果PHP用UTF-8,前端模版是GBK,再加上模版引擎不强大,那么转码工作够你受的。所以尽可能的选用自己需要的编码,而不是简单的选择UTF-8了事。
最后啰嗦一句:UTF-8下:strlen("我")=3,而GBK下:strlen("我")=2

5.该用SQL的地方使用PHP
同样酌情考虑:
例如,有些人习惯在建表时,默认值填写CURRENT_TIMESTAMP,用来达到注册时间、发帖时间的效果。 或者在时间判断的SQL语句中,写类似SELECT x FROM tab1 WHERE regdate < UNIX_TIMESTAMP()。那么我只能说,你为系统埋下了很隐蔽的BUG。因为数据库和应用往往不在同一台机器上,时间很容易出现偏差。当你一套应用的时间参照不准确时,就会出现很大的问题。
正确做法是:不要使用MySQL的任何时间函数,而是在应用里计算时间。如果是分布式应用,一定要有时间服务器来统一管理时间。
而文中说的一些MySQL数学函数 ,也是要慎用。因为在大型应用中,数据库的负担往往是最大的,而复杂的WHERE语句又是造成慢查询的元凶。所以,要把计算尽可能的放在廉价的、不影响全局稳定的应用服务器上,而不是核心数据库上。

6.不优化查询
这点也不用说了,大型应用上甚至不允许使用各种JOIN,哪怕生写两条查询,查回来在用PHP合并数据。

7.使用错误的数据类型
INT,TinyINT,VARCHAR,CHAR,TEXT这些字段类型的合理选用无可厚非。
而Date、DateTime、TIMESTAMP这三种类型,在大型应用中是绝对不可以使用的,而是要用INT(10) UNSIGNED代替。
一个是性能,另外就是应用中尤其是PHP对UNIX_TIMESTAMP时间戳的转化实在太方便了。用Date要输出各种时间格式反而麻烦。

8.在SELECT查询中使用*
共勉

9.索引不足或者过度索引
索引是必须的,但是如果索引都解决不了的查询,考虑memcache或者nosql解决方案吧。

10.不备份
这条是作者凑数么?

11.另外:不考虑其他数据库
这条相当正确。应用中不仅要针对应用选择其他数据库,甚至还要针对具体的业务类型,在同一套应用中并行使用多种数据库。哪怕不是数据库,而是其他各种缓存、内存存储等解决方案

分享到:
评论

相关推荐

    PHP开发者最常犯的11个MySQL错误编程小技巧共4页

    PHP开发者最常犯的11个MySQL错误编程小技巧共4页.pdf.zip

    PHP开发者常犯的10个MySQL错误更正剖析

    最近看到一篇文章:《PHP开发者常犯的10个MySQL错误》,发现文中不少内容陈旧,随着时间推移技术发展变化而变得不适用。为了防止误导新手,特本着与时俱进的精神写出此文,绝非对原文作者的不尊重

    PHP与MySQL程序设计(带完整书签)

    《php与mysql程序设计(第4版)》涵盖了两种技术新版本中出现的最新特性, 书中大量实际的示例和深入的分析均来自于作者在这方面多年的专业经验,可用于解决开发者在实际中所面临的各种挑战。 《php与mysql程序设计...

    让你成为更出色的PHP开发者的10个技巧

    5、代码注释不要过头,适当就好 6、收藏喜爱的代码片断并放在很容易找到的地方 7、使用一款好的源码编辑器来节约时间 8、使用MySQL管理工具(如phpMyAdmin) 9、使用PHP框架 10、与其他PHP开发者保持交流

    MySQL 入门学习 ——基础教程

    在indows环境下构筑和调试MySQL数据库是许多网站开发者的一种首选。本人在Windows98环境下初学MySQL,现将学习过程与经验总结出来供大家参考。 1、下载mysql-3.23.35-win.zip并解压; 2、运行setup.exe;选择d:\...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度...

    YurunPHP(开源 PHP 框架) v1.3.zip

    多数据库自由切换:配置文件中可以配置多个数据库连接,在需要时连接,自由切换 模版引擎:采用 html 标签式的标签,方便不懂 PHP 的设计人员制作页面模版。release 模式下模版会被编译,无须担心效率损耗! 插件...

    phpMyAdmin 4.4.0 Alpha1 绿色多语版.zip

    Dhananjay Nakrani 改进了错误报告服务器,添加了一个可选的报告特性,允许用户自动的直接提交错误报告给 phpMyAdmin 的开发者,现在也支持 PHP 错误报告提交。 Bimal Yashodha 重构了重新设计界面的代码。 其他更...

    优秀代码编辑器工具 PhpDesigner 8.1.2 Portable 绿色中文免费版.zip

    2.支持PHP,HTML, CSS, JavaScript等phpDesigner不仅是一个功能强大的PHP IDE和编辑器还是一个HTML, XHTML, MySQL,XML, CSS, JavaScript, Smarty, VBScript, Java, C#, Perl, Python,Ruby编辑器! 3.智能化语法加亮...

    iWebshop开源PHP商城系统 v2.8.rar

    iWebShop 是一款面向独立卖家的单用户开源网店系统,基于PHP MySQL框架开发,通过它可以迅速建立起一个B2C2C网上商城。iWebShop集成了一切网店必要的功能模块,且不臃肿,是您首选建站绿色程序。其 100% 的源码开放...

    password_compat-masterPHP5.5密码功能的兼容库

    大多数Web程序开发者依然将XML作为一个彻底的简单数据库使用。PHP5中也采用了一系列简单易用、功能强大的方法处理XML文档。 今天,已经有包括雅虎和亚马逊等在内的数百万网站,以及众多的开发人员和编程爱好者正在...

    password_compat-masterPHP5.5密码功能的兼容库.zip

    大多数Web程序开发者依然将XML作为一个彻底的简单数据库使用。PHP5中也采用了一系列简单易用、功能强大的方法处理XML文档。 今天,已经有包括雅虎和亚马逊等在内的数百万网站,以及众多的开发人员和编程爱好者正在...

    贝云校园网站管理系统 v1.0

    贝云校园管理系统(pc+微信+服务窗),基于thinkphp5.0.11,包含文章,图片,下载,视频,学生,专业模型,旨在帮助开发者节约web应用后台开发时间和精力,以最快的速度开发出高质量的web应用。主要特性:基于tp5.0.11...

    贝云校园网站管理系统 v1.0.zip

    贝云校园管理系统(pc 微信 服务窗),基于thinkphp5.0.11,包含文章,图片,下载,视频,学生,专业模型,旨在帮助开发者节约web应用后台开发时间和精力,以最快的速度开发出高质量的web应用。 贝云校园管理系统主要...

    一款性能优越的PHP MVC框架EaglePHP(V1.4)

    完全基于PHP5可用于开发WEB程序和服务,借鉴国外优秀框架的设计思路,分层的设计思想使独立开发成为可能,建立模型推动代码的重用,有助于促进快速软件开发(RAD)和创建更稳定的程序,节约了开发者的时间,并减少重复...

    tplay:Tplay是一款基于ThinkPHP5 + Layui2 + Mysql开发的后台管理框架,PHP版本要求提升到5.5,Tplay集成了一般应用所必须的功能模块,为开发者减少重复性的工作,提升开发速度,规范团队开发模式。————记得star哦

    3.调整自定义分页类的位置为app目录下,方便开发者后续直接覆盖升级thinkphp目录Tplay 1.3.3更新说明:这次更新主要是填上个版本搞出来的小坑,如果自行修复过的可以不升级1.修复部分css加载不到的错误2.修复左侧...

    phpcms v9 开发版 v1.1.0

    运行环境:PHP+MySQL phpcmsv9dev是官方公布的最新开发版,该版是为了让开发者和用户第一时间了解新版开发动态,反馈和交流新版问题,不适合正式建站使用。 PHPCMSV9DEV1.1.0功能变更及bug修正说明: 1.修复复选框...

Global site tag (gtag.js) - Google Analytics