PHPCMS开发文档里看到PHP编码规范(5)
来源:asp之家 发布时间:2009-08-18 11:17:00
5.3.4. 查询优化
MySQL中并没有提供针对查询条件的优化功能,因此需要开发者在程序中对查询条件的先后顺序人工进行优化。例如如下的SQL语句:
SELECT * FROM table WHERE a>’0’ AND b<’1’ ORDER BY c LIMIT 10;
事实上无论a>’0’还是b<’1’哪个条件在前,得到的结果都是一样的,但查询速度就大不相同,尤其在对大表进行操作时。
开发者需要牢记这个原则:最先出现的条件,一定是过滤和排除掉更多结果的条件;第二出现的次之;以此类推。因而,表中不同字段的值的分布,对查询速度有着很大影响。而ORDER BY中的条件,只与索引有关,与条件顺序无关。
除了条件顺序优化以外,针对固定或相对固定的SQL查询语句,还可以通过对索引结构进行优化,进而实现相当高的查询速度。原则是:在大多数情况下,根据WHERE条件的先后顺序和ORDER BY的排序字段的先后顺序而建立的联合索引,就是与这条SQL语句匹配的最优索引结构。尽管,事实的产品中不能只考虑一条SQL语句,也不能不考虑空间占用而建立太多的索引。
同样以上面的SQL语句为例,最优的当table表的记录达到百万甚至千万级后,可以明显的看到索引优化带来的速度提升。
依据上面条件优化和索引优化的两个原则,当table表的值为如下方案时,可以得出最优的条件顺序方案:
字段a 字段b 字段c
1 7 11
2 8 10
3 9 13
-1 0 12
最优条件:b<’1’ AND a>’0’
最优索引:INDEX abc (b, a, c)
原因:b<’1’作为第一条件可以先过滤掉75%的结果。如果以a>’0’作为第一条件,则只能先过滤掉25%的结果
注意1:字段c由于未出现于条件中,故条件顺序优化与其无关
注意2:最优索引由最优条件顺序得来,而非由例子中的SQL语句得来
注意3:索引并非修改数据存储的物理顺序,而是通过对应特定偏移量的物理数据而实现的虚拟指针
EXPLAIN语句是检测索引和查询能否良好匹配的简便方法。在phpMyAdmin或其他MySQL客户端中运行EXPLAIN+查询语句,例如EXPLAIN select * FROM table WHERE a>’0’ AND b<’1’ ORDER BY c;这种形式,即使得开发者无需模拟上百万条数据,也可以验证索引是否合理,相关细节请参考MySQL说明。
值得提出的是,Using filesort是最不应当出现的情况,如果EXPLAIN得出此结果,说明数据库为这个查询专门建立了一个用以缓存结果的临时表文件,并在查询结束后删除。众所周知,硬盘I/O速度始终是计算机存储的瓶颈,因此,查询中应当尽全力避免高执行频率的SQL语句使用filesort。尽管,开发者永远都不可能保证产品中的全部SQL语句都不会使用filesort。
限于篇幅,本文档远远没有涵盖数据库优化的方方面面,例如:联合索引与普通索引的可重用性、JOIN连接的索引设计、MEMORY/HEAP表等。数据库优化实际上就是在很多因素和利弊间不断权衡、修改,惟有在成功与失败经验中反复推敲才能得出的经验,这种经验往往就是最难能可贵和价值连城的。
5.3.5. 兼容性问题
由于MySQL 3.23至5.0的变化很大,因此程序中尽量不使用特殊的SQL语句,以免带来兼容性问题,并给数据库移植造成困难。
通常在MySQL 4.1以上版本,phpcms应使用相当的字符集来存储,例如GBK/BIG5/UTF-8。传统的latin1编码虽然有一定的兼容性,但仍然不是推荐的选择。使用相应非默认字符集时,程序每次运行时需要使用SET NAMES ‘character_set’;来规定连接、传输和结果的字符集。
Mysql 5.0以上新增了数种SQL_MODE,默认的SQL_MODE依服务器安装设置不同而不同,因此程序每次运行时需要使用SET SQL_MODE=’’;来规定当前的SQL模式。
6. 模板设计
6.1.代码标记
HTML代码标记一律采用小写字母形式,杜绝任何使用大写字母的方式
模板中所有的逻辑体,如{if}、{loop}等,必须前后使用HTML注释(<!-- -->),即类似<!--{if expr}-->的形式。事实上,phpcms模板编译器是支持不加HTML注释的逻辑体写法的,但加入注释可以使得模板可读性更好,同时方便用户使用DreamWeaver或FrontPage等对模板进行修改。


猜你喜欢
- 目录VMware BurpSuite一、虚拟机镜像和VMware安装和使用二、nmap安装和在虚拟机中使用1.nmap包含四项基本功能:2.
- Google AdSense是Google推出的一种网络会员联盟,可以让具有一定访问量规模的网站发布商为展示Google广告并将网站流量转化
- Vmware虚拟机安装centos8 ,报错“Section %Packages Does Not End With %
- 拷贝数据远程拷贝数据的时候,我们一般使用rsync命令,但是如果拷贝大量的小文件,会导致rsync的传输速度慢。使用tar pv lz4打包
- 据说,世界上每年由于垃圾电子邮件给人们带来的损失就高达数亿美元。在Windows操作系统中也许您已经尝够了垃圾邮件给您带来的苦头,让您防不胜
- 通常,微软IE工作过程描述如下:作为网页挂马的散布者,其目的是将木马下载到用户本地,并进一步执行,当木马获得执行之后,就意味着会有更多的木马
- 1、何谓虚拟系统“虚拟系统”的意思是“假的系统”,亦即当一个
- 今天谈的百度搜索引擎优化,并非传统的百度搜索引擎优化,而是针对百度搜索引擎算法最近调整,侯庆龙分析百度搜索引擎优化总体的分析。百度搜索引擎竞
- 介绍rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程
- 看了不少的网站改版方案,发现目前大多网站在改版的时候,着重对网站的设计、功能、内容管理系统的投入,而忽略了对已有流量的保持,至于搜索引擎的可
- 20岁的黑龙江无业人员段宗屹,通过发送 “灰鸽子”木马病毒,获取淘宝网店铺店主的银行信息,先后3次盗取店主账户内两万余元资金。近日,宣武法院
- 在百度搜索给站长的建站建议中的第五条提到:如果没有搜索引擎,你的网站仍然访客盈门,那么你的网站就属于“常青树”了。面向用户做网站,而不要面向
- 核心提示:404错误页面。总之就是链接不存在相应的网页。那么404错误页面对seo有什么影响吗?有什么好利用的呢?出现错误页面的情况,一般有
- 图为一位顾客在美国百思买超市查看已经上架待售的Windows 7套装。Win7今日起正式发售,其界面效果华丽无比。图/CFP备受瞩目的微软新
- web服务器可以解析(handles)http协议。当web服务器接收到一个http请求(request),会返回一个http响应 (res
- 百度目前收录新站正常收录应该在一个月左右,你要是传统的,建站,加内容,提交到搜索引擎那就太慢了,如果能吸引蜘蛛的注意力,那你的站就会很快收录
- 1、基于ip地址的虚拟主机Listen 80<VirtualHost 172.20.30.40> &nbs
- 一、用户体验从用户的角度来分析,色彩需求、方便导航、网站建设的网页大小、来达到用户体验提高。二、框架结构搜索引擎不支持框架结构与框架调用的,
- Linux配置定时任务,大家都知道使用crontab这个系统功能,但有时候我们需要区分用户执行,下面就直接说一下2种方法的区别:方法1:使用
- 先介绍一下我的站点的推广的成绩,推一把2008年11月17号上线,到目前三个月,目前的世界排名是5万,现在注册会员有2600多, 最高日发贴