› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
zzuyanan
V2EX  ›  MySQL

wordpress 发现 mysql 执行这条语句时间太长了,咋优化?

  •  
  •   zzuyanan · Oct 22, 2017 · 5858 views
    This topic created in 3271 days ago, the information mentioned may be changed or developed.
    show full processlist:
    语句如下:Copying to tmp table | SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (749) ) AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish') GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 24 |

    这似乎是在检索某个分类下的最新的文章,但是执行时间高达 103 秒,难道是数据量太大,大约 600 万文章吧,那也不至于这么慢? vps 配置也不低啊,6 核 8G 内存,ssd 硬盘。 请教各位 了!
    15 replies  •  2017-12-03 12:43:31 +08:00
    msg7086
        1
    msg7086  
       Oct 22, 2017
    600 万文章用 WP 你不定制的话这配置我觉得跑不动。
    隔壁有个 60 万文章的用 DLE (号称比 WP 快?)独服都跑不动,老老实实定制完,双核 VPS 就能随便跑了。
    abccccabc
        2
    abccccabc  
       Oct 22, 2017
    个人感觉 wordpress 的表结构设计不好,posts 表数据一大,死翘翘。

    SQL_CALC_FOUND_ROWS 在速度上会比 COUNT(*)慢很多,具体有多慢,取决于你的索引还有一些别的因素, count 大约要比 SQL_CALC_FOUND_ROWS 快上 10 倍.

    https://www.percona.com/blog/2007/08/28/to-sql_calc_found_rows-or-not-to-sql_calc_found_rows/
    zzuyanan
        3
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 哪里有定制啊 ,请教了
    zzuyanan
        4
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 另外 DLE 是啥?
    msg7086
        5
    msg7086  
       Oct 22, 2017
    @zzuyanan DLE = Datalife Engine
    哪里有定制?我也不知道。把预算和定制需求报出去问问看咯。
    wdlth
        6
    wdlth  
       Oct 22, 2017
    有些功能不常用的可以把它精简一下,像这个功能的结果你可以先缓存起来,毕竟不是所有时候都需要更新最新文章列表。
    zzuyanan
        7
    zzuyanan  
    OP
       Oct 22, 2017
    @wdlth 我目前就是这种思路,每天定时更新最新文章 3 次并缓存,但是每次更新都得要 2 个小时啊,因为分类很多,如果每个分类我只更新前 20 页的内容,也需要很长时间啊
    zzuyanan
        8
    zzuyanan  
    OP
       Oct 22, 2017
    @msg7086 问了报价,8000 !
    AlwaysBehave
        9
    AlwaysBehave  
       Oct 22, 2017
    @zzuyanan 算很便宜的吧,按照现在这个“趋势”
    你具体需求是什么?实时更新?
    zzuyanan
        10
    zzuyanan  
    OP
       Oct 22, 2017
    @AlwaysBehave 其实就是让分类页的最新文章能够快速显示出来,现在表太大 40G,显示的太慢了。
    rogwan
        11
    rogwan  
       Oct 22, 2017
    @zzuyanan Copying to tmp table 你这个不是建一个临时的新文章表吗?这个 copy 任务可以定时后台执行,用户数据直接从 tmp table 里读取最新文章,和主表多大无论几十 G 都没有关系了。
    zzuyanan
        12
    zzuyanan  
    OP
       Oct 22, 2017
    @rogwan 这个思路好,从临时表里抽数据
    zzuyanan
        13
    zzuyanan  
    OP
       Oct 22, 2017
    @abccccabc 是的,所以我准备再建立一个 wp_posts_1 表,只放最新的 10000 条记录,然后从这个表抽取数据,经过测试非常快。但是问题来了,如何让 wordpress 从 wp_posts_1 表里提取数据呢?要知道默认都是从 wp_posts 表提取的,wp_query 并没有提供改表的参数啊
    aksoft
        14
    aksoft  
       Nov 21, 2017
    随便问一句,这个是什么网站。。
    likuku
        15
    likuku  
       Dec 3, 2017
    @zzuyanan 没有参数,那就去改 wp 源代码了哦
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2244 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 00:22 · PVG 08:22 · LAX 17:22 · JFK 20:22
    ♥ Do have faith in what you're doing.