担心被骂,本不想写这篇文章。犹豫良久,最终还是决定写。希望能够帮助到一些朋友,认识到数据库索引正确设计的重要性。* d) h# Q+ J" g' U5 P( R. S
0 N1 e% D& E2 ^" j) K# [8 ? [# I; q9 S由于我比较懒,就简单用文字描述一下,就懒得切图片证明了,懂技术的朋友可以自己测试一下,可证实我的测试结果是否真实。不懂技术的朋友信不信也无妨。( T, g5 M' k; Y6 t/ }
) N/ a' u' T$ D. F测试程序:
8 C, L4 Y! @8 l030ci.mmafn.com 248bk.mmg2g.net 774ke.mobilew.net 082pp.mobilew.net 748fm.mobo6.com 280or.mokezi.com 732pb.mrdxm.com 606tq.mrpao.com 735tg.mrpao.com 570ct.msd0755.com
1 F! V8 z- C) F6 H9 uCMS程序:帝国cms dedecms phpcms
) H. M0 R+ O; \+ r* V* ]
* ^3 p5 E! Z: [5 l) w论坛程序:discuz phpwind xiuno
) k; f: |2 ? N& Q' o5 q
; C3 A. \# w* }/ `! N负载测试结果:
3 ~% T/ M- }; _, I, ~( v* ]
% t" c6 r! {) C5 E6 K- Hxiuno > discuz > phpwind > phpcms > ( 帝国cms ? dedecms)! e* S+ C( H" b1 X& ^
/ o, I' L2 Q0 W% C. O从数据库设计来看(个人观点):
% r- {+ U* i' v# k& \! G6 L) @, r6 c/ C; ]' A, Z ]8 m
xiuno > (discuz 、 phpwind 、 phpcms) > (帝国cms 、 dedecms)
, S/ P+ ^3 V f: I' s" e% z/ R! b9 L8 [; a6 k
dedecms和帝国cms都是老牌的CMS了,从的数据库设计来看,不知是数据库设计者完全没有理解mysql索引的真谛,还是留一手以对高负载需求的用户收费改进?(希望不懂技术的朋友不要喷我,真正懂mysql索引的朋友可以自己看一下他们对索引的设计,虽然对于dedecms和帝国cms的作者来说,我只是一个晚辈,像您们这样有10多年开发经验的人,我比较尊敬,但我建议当前的dedecms和帝国cms数据库设计者还是再研究一下mysql索引吧,可以不相信我,但可以花点时间看看discuz 、phpwind的数据库设计吧,确实是比您们的好)。' c3 t- g) v# c
+ p/ ]2 d+ S3 R! S7 q0 A如果有幸帝国cms作者能看到此文,希望您再重新设计帝国cms架构吧,毕竟这些年您一直在改进帝国cms的负载能力,光是通过分表技术提升,没有真正用到索引来优化,真的不行的,如果用对了索引,性能还会有更大的提升。9 w" B1 ^- c* j7 g
. u$ j0 M0 M, v* Ldedecms的创始人我算是和他认识,但现在dedecms却不是他的,比较遗憾,现在的dedecms这几年确实没多大变化,一直在打补丁,这样下去真是比较悲剧。0 D/ j+ k9 I# y) v* ?
& p4 s1 V- c8 v/ J7 U( b/ w
我的测试环境:
- y2 W7 d. T ^0 Z0 t: D; [
/ P, P! t5 `& w9 ai3CPU 4G内存 1T硬盘 win7系统 apache 2.2 + mysql 5.0(普通环境没有优化过)
" {# _4 q* g3 ^, K0 U, S }& b+ S0 k* Q' Y' g
测试方法:
# y8 o$ b: ]6 ]# Z. O
+ b! Q* h! k/ G! T导入100万至1亿 不等数据,进行简单的访问测试
* l" K. q; w2 ?2 `
* I+ w! Y1 r' u; G" m) G/ k我的导入方法:- s3 V( b( o! D) k( D0 \2 i
+ U% w* F9 Y! ^- j8 [* p! k5 v根据各个程序的数据结构写出导入程序,- Z X( Z& x+ C3 ?( ^ f
$ ]& m! D. o/ |- i% Q" l
1.先写一个PHP程序,将数据写入 e:/insert1.sql 这个文件,
A8 z7 _% d# D; j" H" m* l) f3 N6 Q! d6 ?$ B5 Z
2.然后再通过 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `数据表名` character set 编码; 这种方式导入的,导入千W数据也就几分钟。
4 k9 i- S/ k. q y
, M# F* s0 O" v( |, d1、帝国cms
! b0 b1 u i6 f/ L i+ _4 O6 b' n9 G$ Q( S( z3 v# d, S. t
测试版本:EmpireCMS_7.0_SC_GBK (当前官方最新版)
4 a, J" l R* r, w* @/ g7 c; Y+ {. r+ G% ]: O7 Q- `
先说说帝国cms,官方有一篇大数据测试贴(2千万数据、17.3GB数据库下帝国CMS超强生成速度 ),当年我看到这篇测试贴时,也觉得负载非常强大,但我测试后,令我失望了。
6 l& }+ @+ w2 K- i8 Z. M8 p' H- S E$ L7 v# k8 ~
安装默认测试数据(共33篇新闻测试数据),首页改为动态首页 第一次访问0.670127010345459 第二次访问0.07926607131958
6 |8 l' w" V/ g! z6 U* N* S, Z6 J+ i6 l
|