WordPress 10w+数据时, 解决SQL_CALC_FOUND_ROWS查询使网站变慢问题

Wordpress在查询post列表时,默认会同时把文章数量也查询出来, 使用这种方式的有:get_posts 、query_posts和WP_Query。 get_posts在4.6.1+已经不用SQL_CALC_FOUND_ROWS,但是query_posts和WP_Query还是会用,所以还须优化。 具体语句如下: SELECT SQL_CALC_FOUND_ROWS wp_posts.ID FROM wp_posts WHERE 1=1 AND wp_posts.post_type =…

MySQL kill process

一般我们用命令: mysql> show full processlist; 可能看到很多等待的进程,如果要杀掉其中的某个,用kill命令: mysql> kill 1234; 那如果是要杀掉所有的进程呢? 首先用命令生成 kill 命令字符串,如下: mysql> select group_concat(concat('kill ',id) separator '; ') as cmd from information_schema.processlist where …

MySQL count性能优化

select count(*)是MySQL中用于统计记录行数最常用的方法。 count方法可以返回表内精确的行数,每执行一次都会进行一次全表扫描, 以避免由于其他连接进行delete和insert引起结果不精确。 在某些索引下是好事,但是如果表中有主键,count(*)的速度就会很慢,特别在千万记录以上的大表。 如果用 explain 命令速度会快很多,因为 explain …

如何找出MySQL中正在锁表的语句?

MySQL在每个版本发布时,都会加上一些用以监控内部活动的工具。 但是,监控内部的锁情况的工具一直支持的不好。 监控锁一个非常重要和常用的功能,在这篇文章,我讲阐述如何做到。 1 介绍 假设有这样的一种情况:你准备update一个表,但是每次执行update语句的时候,都一直在等待,直到返回信息告诉你等待锁超时。 你准备update的表已经…

MySQL更新字段来自另一个表的count()值

假设有文章post和评论comment两个表,文章表记录有评论的数量,但是这个值我们要一次更新。 如下,现在post表的comment_count都是0,我们的目标是:执行一个SQL语句,让其把统计comment表的数据数量。 post表数据如下: +---------+-------------------+---------------+ | post_id | title | comment_count | +---------+-------------…

设置MySQL默认时区

MySQL默认的时区是UTC时区,比北京时间晚8个小时。 假设日志里面的时间是中午12:00,那么北京时间应该是晚上的8:00点钟。 为方便查看和设置时间,我们要设置MySQL的默认时区,以符合本地使用。 1 永久有效方法 修改 my.cnf 文件,加入如下2行: default-time-zone='+08:00' # 数据表默认时区 即设置MySQL默认时区为东八区。 2 仅当前会…

MySQL查找和删除重复数据

如何从MySQL中删除重复数据,只保留一条呢? 假设有如下一个数据表: mysql > SELECT * FROM users; +----+--------+ | id | name | +----+--------+ | 1 | google | <-- | 2 | yahoo | <-- | 3 | msn | <-- | 4 | google | | 5 | google | | 6 | yahoo | +----+--------+ 后面3条都是重复的数据,如何用一条命令删掉这些重…

MySQL导入多个.sql文件高效方法

MySQL有多种方法导入多个.sql文件(里面是sql语句),常用的有两个命令:mysql和source。 但是这两个命令的导入效率差别很大,具体请看最后的比较。 (还有sqlimport和LOAD DATA INFILE等导入方法,不过它们主要用于导入.csv或.xml文件数据,不是.sql文件) 假设我们有一个 users.sql 大文件,为方便我们将其拆分成:user1.sql、user2.s…

MySQL重置root密码

我们介绍一种无需密码的重置root密码的方式。 步骤如下: 1、打开配置文件/etc/my.cnf,在mysqld下添加一行skip-grant-tables,如下: [mysqld] #... skip-grant-tables #... 这样我们就可以免密登录MySQL了。 然后保存并退出。 2、重启MySQL 这两个命令2选1: $ sudo systemctl restart mysqld $ sudo service mysqld restart 3、终端…

MySQL查询在一张表不在另外一张表的记录

假设有A、B两张表。 如果查询在A表中存在,但是在B表中不存在的记录,应该如何操作? 1 示例数据 假设A表数据: +----+ | id | +----+ | 1 | | 2 | | 3 | | 4 | | 5 | +----+ B表数据: +----+------+ | id | a_id | +----+------+ | 1 | 3 | +----+------+ 其中,B表中的a_id是需要排除的A表的id。 这里我们要排除A表中id为3的记录,实…