担心被骂,本不想写这篇文章。犹豫良久,最终还是决定写。希望能够帮助到一些朋友,认识到数据库索引正确设计的重要性。
) e, T- G1 \4 A; w' D% e3 D2 M
1 K6 c Y# `6 n/ t# l9 U2 I由于我比较懒,就简单用文字描述一下,就懒得切图片证明了,懂技术的朋友可以自己测试一下,可证实我的测试结果是否真实。不懂技术的朋友信不信也无妨。
) ]9 \% x3 u" Q8 j1 p" m6 a4 `8 B; \5 r. z
测试程序: ( W: z1 g% }( I, D; a6 I7 i D' I
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.com
' A7 p7 P' P, M8 F+ F0 }CMS程序:帝国cms dedecms phpcms0 @+ C; M+ p7 h# w; f8 f
- X8 D& K4 w# [7 D- Z6 s, H# I- D论坛程序:discuz phpwind xiuno* Y i, j0 G+ V$ H- m# S" Q
5 N7 j+ M) C9 D O
负载测试结果:4 V: @; x; p; B. p' {& k
! O( o7 ]" {1 [; nxiuno > discuz > phpwind > phpcms > ( 帝国cms ? dedecms)1 P6 V D7 z( f* d( o/ M: U
1 `5 e% {- r& I3 q1 m* ?
从数据库设计来看(个人观点):
% O4 @7 s# W# f7 J* j
: ~$ u7 |; k" Exiuno > (discuz 、 phpwind 、 phpcms) > (帝国cms 、 dedecms)7 Y# b4 n: ]" R; @
5 a: M! V) O- ?. g2 z9 ededecms和帝国cms都是老牌的CMS了,从的数据库设计来看,不知是数据库设计者完全没有理解mysql索引的真谛,还是留一手以对高负载需求的用户收费改进?(希望不懂技术的朋友不要喷我,真正懂mysql索引的朋友可以自己看一下他们对索引的设计,虽然对于dedecms和帝国cms的作者来说,我只是一个晚辈,像您们这样有10多年开发经验的人,我比较尊敬,但我建议当前的dedecms和帝国cms数据库设计者还是再研究一下mysql索引吧,可以不相信我,但可以花点时间看看discuz 、phpwind的数据库设计吧,确实是比您们的好)。
% Z& i8 X; v2 J9 E2 i' p+ d" W" L O8 c% p
如果有幸帝国cms作者能看到此文,希望您再重新设计帝国cms架构吧,毕竟这些年您一直在改进帝国cms的负载能力,光是通过分表技术提升,没有真正用到索引来优化,真的不行的,如果用对了索引,性能还会有更大的提升。* H+ u/ W5 C4 q; C8 V B; r
+ a% O/ N* H: y" F1 ededecms的创始人我算是和他认识,但现在dedecms却不是他的,比较遗憾,现在的dedecms这几年确实没多大变化,一直在打补丁,这样下去真是比较悲剧。4 G v6 j( \. |& Z. d
$ R' U5 g, s @
我的测试环境:
4 k8 v; Z* f' l# p8 f. K2 u$ Q# D. d) K& h% `/ V& N
i3CPU 4G内存 1T硬盘 win7系统 apache 2.2 + mysql 5.0(普通环境没有优化过)
" p# X" `2 c, b2 e# K4 w& }6 G/ R8 Z$ Z- x. M) u
测试方法:8 B, _- I% A- G, C
8 U( g* g# J" {) J' v, i( ^# [导入100万至1亿 不等数据,进行简单的访问测试; K9 f' q; Z" e1 X
+ _. u g8 H7 e- ~. F' A( b0 ~我的导入方法:
0 l: Y& \4 K ^) s0 k- Z% K7 [4 U5 c- ]7 |- I% L8 J
根据各个程序的数据结构写出导入程序,
) s! e7 L1 }7 u5 @7 t$ v
* |7 ~4 s% x2 V0 g& E2 c# |1.先写一个PHP程序,将数据写入 e:/insert1.sql 这个文件,, m! y6 y- @" I: D( R( J, Z/ v
( Q: q5 Y r; i. y
2.然后再通过 LOAD DATA local INFILE 'e:/insert1.sql' INTO TABLE `数据表名` character set 编码; 这种方式导入的,导入千W数据也就几分钟。
1 ^* F. c- s' K: {; H9 w) P1 M8 }2 d$ y) I: E7 {+ s+ S+ |
1、帝国cms
0 L* [" P- z8 B2 `" u, g2 s9 y& [6 q) x
; P; [, h( V( e+ T6 P X5 \6 R测试版本:EmpireCMS_7.0_SC_GBK (当前官方最新版)$ v/ d7 z# ~6 V. H) F
8 B& ?& i5 a$ H* e0 {/ C
先说说帝国cms,官方有一篇大数据测试贴(2千万数据、17.3GB数据库下帝国CMS超强生成速度 ),当年我看到这篇测试贴时,也觉得负载非常强大,但我测试后,令我失望了。
0 U: o: T+ G- \( ?
8 [2 i% ^: N& b: t& O' A. Q+ D3 q8 k安装默认测试数据(共33篇新闻测试数据),首页改为动态首页 第一次访问0.670127010345459 第二次访问0.07926607131958) ?1 m+ I3 ]$ _: u$ B3 o+ `
6 ]! y% `- s/ G( A* E" }5 b3 T
|