担心被骂,本不想写这篇文章。犹豫良久,最终还是决定写。希望能够帮助到一些朋友,认识到数据库索引正确设计的重要性。/ t+ m9 c6 o8 L! s d
2 O( E1 b7 A3 h; t2 P8 Z
由于我比较懒,就简单用文字描述一下,就懒得切图片证明了,懂技术的朋友可以自己测试一下,可证实我的测试结果是否真实。不懂技术的朋友信不信也无妨。
4 z3 P) a. B8 X3 j" Z" E3 J C5 m7 w8 Y" U# W' x
测试程序: ; o& @9 U% h9 N. ?0 y$ r
030ci.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.com8 u6 B* s( B. }
CMS程序:帝国cms dedecms phpcms
/ j E" x! K& [& d, i% L
- T. b8 t7 P; W4 z3 M9 N8 S- Z( u论坛程序:discuz phpwind xiuno
. o8 B7 ]. y9 u: m3 g1 J) x/ A8 ]1 D; @- W
负载测试结果:
; ]2 ^/ Z) a+ s* ~! s! {( g0 W7 o- a% x$ J6 \8 B
xiuno > discuz > phpwind > phpcms > ( 帝国cms ? dedecms): t8 y0 }7 C5 n9 o) H' i
q8 h2 Z7 y- C% a, |# `从数据库设计来看(个人观点):
h' X) Y! X, T( {! f' V4 z+ z r) Q8 @
xiuno > (discuz 、 phpwind 、 phpcms) > (帝国cms 、 dedecms): `; j! L! y6 h+ ~: K3 K& \: N
3 `" R. l7 h: A( G' W) h6 Y* f
dedecms和帝国cms都是老牌的CMS了,从的数据库设计来看,不知是数据库设计者完全没有理解mysql索引的真谛,还是留一手以对高负载需求的用户收费改进?(希望不懂技术的朋友不要喷我,真正懂mysql索引的朋友可以自己看一下他们对索引的设计,虽然对于dedecms和帝国cms的作者来说,我只是一个晚辈,像您们这样有10多年开发经验的人,我比较尊敬,但我建议当前的dedecms和帝国cms数据库设计者还是再研究一下mysql索引吧,可以不相信我,但可以花点时间看看discuz 、phpwind的数据库设计吧,确实是比您们的好)。3 U* o1 \0 X1 i' q" f& ~
* w, ~1 d' ~) O7 h如果有幸帝国cms作者能看到此文,希望您再重新设计帝国cms架构吧,毕竟这些年您一直在改进帝国cms的负载能力,光是通过分表技术提升,没有真正用到索引来优化,真的不行的,如果用对了索引,性能还会有更大的提升。! c% f' f, @9 B6 K- L, [6 @) j9 e
7 Q" D+ y; R0 r- D# Y8 H
dedecms的创始人我算是和他认识,但现在dedecms却不是他的,比较遗憾,现在的dedecms这几年确实没多大变化,一直在打补丁,这样下去真是比较悲剧。
9 o- \! {+ M) M) L+ p* ^; N6 R e b. B
我的测试环境:
- ?* ~- Y! Q, ]* l* B8 E3 G8 G+ P* }% E/ j8 Z
i3CPU 4G内存 1T硬盘 win7系统 apache 2.2 + mysql 5.0(普通环境没有优化过)
* O# U/ m3 Z0 m3 W, P5 I4 T" O: i
; p1 z+ r3 x- G: O9 n测试方法:
+ X$ I( R; k5 U2 u5 V, T5 r0 j5 ?* ^
导入100万至1亿 不等数据,进行简单的访问测试
: t& |' z# K! T) M" C5 h1 ]" Y! q9 m j3 b
我的导入方法:
. \) P: {, r2 F4 L6 T4 y8 e
1 F* A! |% T- @# N根据各个程序的数据结构写出导入程序,+ b u6 Y: H' U6 B$ E+ {7 ]3 N
( i) O7 \0 R2 ^% _
1.先写一个PHP程序,将数据写入 e:/insert1.sql 这个文件,
* V0 S; O8 { f4 g0 U7 { N! b9 ^# p9 F; j) g; o8 W
2.然后再通过 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `数据表名` character set 编码; 这种方式导入的,导入千W数据也就几分钟。
/ l% m" e! ~: A+ T: s
* T+ o1 V9 F2 R5 q7 u2 I1、帝国cms: m; c) ~" p1 `& i5 d2 ]2 ?% V0 a3 Y
/ M t$ h, _0 S
测试版本:EmpireCMS_7.0_SC_GBK (当前官方最新版)
6 ^- U. N. [+ Z8 N! c7 v. k! ^! T% r, W7 J. e
先说说帝国cms,官方有一篇大数据测试贴(2千万数据、17.3GB数据库下帝国CMS超强生成速度 ),当年我看到这篇测试贴时,也觉得负载非常强大,但我测试后,令我失望了。! b; l- V! G8 |( q
# ^% Z' p; M7 K& d
安装默认测试数据(共33篇新闻测试数据),首页改为动态首页 第一次访问0.670127010345459 第二次访问0.079266071319586 n! M' k' p) ~# i/ e
( h. Z4 ~- D7 s9 a/ @+ w |