我们有一个包含数百万个条目的大表。完整计数非常慢,请参见下面的代码。这对于 MySQL InnoDB 表来说很常见吗?难道就没有办法加速这个过程吗?即使使用查询缓存,它仍然“慢”。我还想知道,为什么具有 2.8 mio 条目的“通信”表的计数比具有 4.5 mio 条目的“事务”表的计数慢。
我知道使用 where 子句会快得多。我只是想知道表现不佳是否正常。
我们使用 Amazon RDS MySQL 5.7 和 m4.xlarge(4 个 CPU、16 GB RAM、500 GB 存储)。我也已经尝试过使用更多 CPU 和 RAM 的更大实例,但查询时间没有大的变化。
mysql> SELECT COUNT(*) FROM transaction;
+----------+
| COUNT(*) |
+----------+
| 4569880 |
+----------+
1 row in set (1 min 37.88 sec)
mysql> SELECT COUNT(*) FROM transaction;
+----------+
| count(*) |
+----------+
| 4569880 |
+----------+
1 row in set (1.44 sec)
mysql> SELECT COUNT(*) FROM communication;
+----------+
| count(*) …Run Code Online (Sandbox Code Playgroud) 我在我的数据库服务器上设置了mysql慢查询日志,并将长查询时间设置为5.只需检查日志及其日志查询,只需几毫秒.任何人都知道为什么会这样?,这里有一些日志.
最后一个查询并不是最优化的.它说它检查了450000行,所以我不会惊讶地看到它在日志中.然而查询时间表示只花了0.2秒.慢查询日志还有更多信息,只需查询执行时间吗?
# Query_time: 0.000525 Lock_time: 0.000151 Rows_sent: 1 Rows_examined: 115
SET timestamp=1349393722;
SELECT `we_members`.*, `we_referrals`.`code` as referral_code
FROM (`we_members`)
LEFT JOIN `we_referrals` ON `we_referrals`.`m_id` = `we_members`.`id`
WHERE `we_members`.`facebook_id` = '100'
LIMIT 1;
# Query_time: 0.000748 Lock_time: 0.000104 Rows_sent: 3 Rows_examined: 691
SET timestamp=1349393722;
select distinct(m_id), m.first_name, m.facebook_id, m.photo_url from
we_connections f
left join we_members m on m.id = f.m_id
where ( (f.friend_id = 75 or f.m_id = 75 and m.id != 75))
and m.id >0
and m.id != 75 …Run Code Online (Sandbox Code Playgroud) 我看过很多类似的问题,但我似乎找不到答案。我想为我的 MySQL 数据库设置slow query log。我看到很多答案说我应该访问 MySQL 命令行工具。我不确定如何找到这个工具,但我尝试通过以下方式访问它:
c:/xampp/mysql/bin/mysql -u root -p -h localhost
但在这里我得到了 MariaDB,它似乎与我之前见过的任何其他答案/教程不同。输入:
设置 log_slow_queries = ON;
给我错误
错误 1193 (HY000):未知的系统变量“log_slow_queries”
我的网站正在经历一个非常缓慢的加载时间.我怀疑它可能是javascript或php导致更长的加载时间,但我已经在YSlow测试了我的网站,它的等级是B,我认为也不错.
现在我想检查我的数据库是否有查询错误,数据库索引会导致我的网站加载速度变慢.
是否有一些教程或技巧我可能会阅读或尝试测试数据库,以确定是否有慢查询?有关数据库管理的提示吗?
我不明白为什么以下查询显示在慢查询日志中,查询时间为12到20秒.
UPDATE `wp_postmeta` SET `meta_value` = '35' WHERE `post_id` = 1267 AND `meta_key` = 'views'
UPDATE `wp_postmeta` SET `meta_value` = '32' WHERE `post_id` = 874 AND `meta_key` = 'views'
UPDATE `wp_postmeta` SET `meta_value` = '122' WHERE `post_id` = 18557 AND `meta_key` = 'views'
UPDATE `wp_postmeta` SET `meta_value` = '3078' WHERE `post_id` = 21741 AND `meta_key` = 'views'
UPDATE `wp_postmeta` SET `meta_value` = '2657' WHERE `post_id` = 878 AND `meta_key` = 'views'
Run Code Online (Sandbox Code Playgroud)
它们看起来很正常,在phpMyAdmin中执行其中一个测试只需要0.0056秒.这里
的wp_postmeta桌子大小是77,996.
我想知道为什么上面的查询是如此缓慢,如果有什么我可以做些来改进它们?
分析日志是一个主要问题。如果你有一个遗留代码和成百上千的查询在运行,你肯定会对改进什么、改进哪里以及改进多少感到困惑,因为在你将投入多少努力之间总是需要权衡在某个优化问题上。
那么,第一步是分析我们哪里出错了。这只能通过正确分析日志来实现。没有它,您可能不知道您的应用程序到底出了什么问题。
那么你如何分析 MySQL 日志呢?
有一个名为transactions约 600 万行的表。下面的查询计算当前用户余额。这是我启用后的日志slow_query_log = 'ON':
# Time: 170406 9:51:48
# User@Host: root[root] @ [xx.xx.xx.xx]
# Thread_id: 13 Schema: main_db QC_hit: No
# Query_time: 38.924823 Lock_time: 0.000034 Rows_sent: 1 Rows_examined: 773550
# Rows_affected: 0
SET timestamp=1491456108;
SELECT SUM(`Transaction`.`amount`) as total
FROM `main_db`.`transactions` AS `Transaction`
WHERE `Transaction`.`user_id` = 1008
AND `Transaction`.`confirmed` = 1
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)
正如你所看到的~38 seconds!
这是transactions表解释:
这个查询有时运行得很快(大约 1 秒),有时真的很慢!
任何帮助将不胜感激。
PS:
它是 InnoDB 并且transactions表有频繁的 INSERT 和 SELECT 操作。
我尝试使用 运行查询 …
使用MySQL 5.5.28版,
我有一个表定义如下:
CREATE TABLE IF NOT EXISTS `groups` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(80) NOT NULL,
`desc` text NOT NULL,
`permissions` varchar(80) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
Run Code Online (Sandbox Code Playgroud)
如您所见,它非常简单.我在id字段上有一个主键.现在,我使用以下内容查询它:
SELECT permissions FROM groups WHERE id IN ('9', '8', '6','14','11','7','5');
Run Code Online (Sandbox Code Playgroud)
不幸的是,它拒绝使用密钥,它出现在我的慢查询日志中.
对它执行EXPLAIN提供:
mysql> EXPLAIN SELECT permissions FROM groups WHERE id IN ('9', '8', '6','14','11','7','5');
+----+-------------+--------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows …Run Code Online (Sandbox Code Playgroud) mysql ×8
performance ×3
error-log ×1
indexing ×1
innodb ×1
linux ×1
log-analysis ×1
wordpress ×1
xampp ×1