ucms 千万级文章优化

admin 2018-6-13 757

千万级文章优化方法:

sqlite也支持千万级别的文章数量,访问量高的话,不建议使用sqlite.

mysql请使用innodb类型,默认安装使用的是MyISAM,请在安装前修改/inc/config.php文件,将MysqlEngine值修改为InnoDB.

如果已经安装为了MyISAM类型,请进数据库修改需要优化的文章表类型.

cid字段建立索引,如果用到了另外的查询条件,排序等,也需要为这些字段建立索引.

高并发下请使用缓存优化响应速度,不同类型的栏目尽量使用不同的表.


最新回复 (4)
全部楼主
  • admin 2018-6-13
    0 2
     UCMS在不进行配置的情况下也拥有不错的性能,如您的站点访问量高,可以从以下几个方面进行性能优化


    inc/config.php文件配置:

    define('SiteCache',1);//开启站点缓存,所有的缓存都依据此参数,如果关闭了,则其他缓存均不会生效

    define('TemplateTime',0);//模板缓存时间,如果不常改模板,建议将0设置为2592000,模板文件将缓存一个月

    define('IndexCache',0);//首页缓存时间,如果站点更新不频繁,建议设置为一个较大的值,能够有效提升性能

    define('WapOpen',1);//如果您的站点没有手机版,请将1设置成0

    后台配置:

    增加栏目页面时请将设置页面缓存时间,可以有效提升性能


    模板:

    使用alist显示文章列表时,请指明具体需要的字段名,默认是查询出所有的字段

    alist查询出的结果也是支持缓存的,可以设置缓存时间 
  • admin 2018-6-13
    0 3
    CREATE INDEX 实例 
    本例会创建一个简单的索引,名为 “PersonIndex”,在 Person 表的 LastName 列
    CREATE INDEX PersonIndex
    ON Person (LastName)
    如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC
    CREATE INDEX PersonIndex
    ON Person (LastName DESC)
    假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开
    CREATE INDEX PersonIndex
    ON Person (LastName, FirstName)
  • admin 2018-6-13
    0 4
    CREATE INDEX bookid
    ON ucms_info (bid ASC) 
  • admin 2018-6-13
    0 5
    这是 oschina 真实的例子,首先看下面这个收藏信息表:

    create table osc_favorites
    (
       user                 int unsigned not null,
       type                 tinyint unsigned not null,
       obj_id               int unsigned not null,
       options              tinyint not null,
       create_time          timestamp not null default CURRENT_TIMESTAMP,
       primary key (user, type, obj_id)
    );

    在 osc_favorites 表中我定义了一个包含三个字段的复合主键 (user, type, obj_id)

    再试试下面这四个SQL查询语句:

    select * from osc_favorites where user = 12 and type = 5 and obj_id = 10
    select * from osc_favorites where user = 12 and obj_id = 10
    select * from osc_favorites where user = 12 and type = 5
    select * from osc_favorites where type = 5 and obj_id = 10

    对上面四个SQL语句进行 EXPLAIN 分析的结果是,前三个 SQL 语句都可以使用 PRIMARY 这个索引(possible_keys)进行检索,但第四个SQL语句则是做了全表扫描,性能极其的差。

    解决的办法是专门为 type 和 obj_id 做一个复合的索引

    create index idx_favorites on osc_favorites
    (
       type,
       obj_id
    );

    这样再次执行第四个SQL,就能用到我们建立的 idx_favorites 索引,就不会进行全表扫描了。
返回