mysql计数(*)需要很长时间?还有更好的选择吗?
执行输出需要10分钟以上。可以在服务器参数中对此进行调优吗?因为我应该每小时运行一次此查询以获取报告,所以对我的业务人员来说,10分钟的查询是不可行的 有没有像oracle一样保留在内存中的选项mysql计数(*)需要很长时间?还有更好的选择吗?,mysql,Mysql,执行输出需要10分钟以上。可以在服务器参数中对此进行调优吗?因为我应该每小时运行一次此查询以获取报告,所以对我的业务人员来说,10分钟的查询是不可行的 有没有像oracle一样保留在内存中的选项 mysql> select count(*) from id_renewal ; +----------+ | count(*) | +----------+ | 13633246 | +----------+ 试试看: mysql> show variables like '%cache
mysql> select count(*) from id_renewal ;
+----------+
| count(*) |
+----------+
| 13633246 |
+----------+
试试看:
mysql> show variables like '%cache%';
+------------------------------+----------------------+
| Variable_name | Value |
+------------------------------+----------------------+
| binlog_cache_size | 32768 |
| have_query_cache | YES |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| query_cache_limit | 1048576 |
| query_cache_min_res_unit | 4096 |
| query_cache_size | 134217728 |
| query_cache_type | ON |
| query_cache_wlock_invalidate | OFF |
| table_definition_cache | 512 |
| table_open_cache | 2048 |
| thread_cache_size | 16 |
+------------------------------+----------------------+
14 rows in set (0.00 sec)
mysql> show global status like '%Qc%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| Qcache_free_blocks | 118 |
| Qcache_free_memory | 133367960 |
| Qcache_hits | 71077421 |
| Qcache_inserts | 137390744 |
| Qcache_lowmem_prunes | 18066 |
| Qcache_not_cached | 120209332 |
| Qcache_queries_in_cache | 427 |
| Qcache_total_blocks | 990 |
+-------------------------+-----------+
mysql> select count(*) from idea_sub_renewal ;
+----------+
| count(*) |
+----------+
| 13633246 |
+----------+
top - 17:40:19 up 148 days, 17:51, 10 users, load average: 0.83, 0.91, 1.00
Tasks: 257 total, 1 running, 251 sleeping, 0 stopped, 5 zombie
Cpu(s): 2.0%us, 0.6%sy, 0.0%ni, 97.1%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st
Mem: 8167348k total, 8124120k used, 43228k free, 33928k buffers
Swap: 16386260k total, 709864k used, 15676396k free, 4615456k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
26329 sym 19 0 1195m 64m 7456 S 13.3 0.8 66:34.40 java
12079 mysql 15 0 1725m 463m 4840 S 6.3 5.8 24227:57 mysqld
477 sym 18 0 674m 62m 7260 S 1.0 0.8 2:25.59 java
26948 powerdev 16 0 12896 1232 824 S 0.7 0.0 0:07.90 top
18843 sym 19 0 1271m 494m 7364 S 0.3 6.2 10:19.89 java
26379 sym 21 0 1203m 299m 7464 S 0.3 3.8 1:36.90 java
29872 sym 18 0 1238m 869m 7816 S 0.3 10.9 7:42.33 java
将mysql更改为最新版本,如5.5.25 inno db。 -myisam数据库在更新和删除时可能会变慢 分发mysql数据和日志磁盘。 -磁盘负载分配非常重要 检查键缓冲区大小、读取缓冲区大小 -非查询缓存 将磁盘更改为SSD -加速 检查mysql日志,查看最大连接、慢速查询等 -当所有日志都被清除时,速度就会到来
显示。。。用于查看索引的表定义。对于具有百万行的表,InnoDB COUNT的工作缓慢。但若不使用WHERE-use EXPLAIN,可以使用hack查看表中有多少行
Select count(1) from table
在“行”列中可以看到行数。该表中有索引吗?你能给我们看一个像id_续订这样的show CREATE表吗?10分钟太多了,即使是10万行。表上有索引吗?你在表上有密集的写入插入/删除/更新吗?@Sash:为什么COUNT1应该与COUNT*不同?在5.5.25中,我在复制中面临一个很大的缺陷。为此,我用mysql-记录了一个bug。我将引擎转到innodb,下面是它的表状态,id|u renewal | innodb | 10 | Compact | 13644275 | 263 | 3600809984 | 0 | 1547698176 | 1113587712 | 13644478 | 2012-07-06 03:19:21 | NULL | NULL | NULL | NULL | NULL |拉丁文1 |瑞典| ci NULL | 10分钟及以上返回。以下是缓冲区中的变量key_buffer_size-268435456 read_buffer_size-1048576计算该表上的索引字段时会发生什么情况?那要花多少时间?从id\u续订中选择countid;我刚刚将引擎转到innodb,下面是它的表状态,id|u renewal | innodb | 10 | Compact | 13644275 | 263 | 3600809984 | 0 | 1547698176 | 1113587712 | 13644478 | 2012-07-06 03:19:21 | NULL | NULL | NULL | NULL |拉丁1 |瑞典| NULL |增加密钥缓冲区大小4倍,读取缓冲区大小和读取缓冲区大小16倍。在我的例子中,选择count*1 mil records in 1秒。你有8G内存,这对于inno db来说太小了。增加它。在root中,更改sysctl-wvm.swappiness=20@OpenCode你怎么认为8GB太小了?我把数据库服务器的内存改成4G、8G、12G,因为InnoDB的性能很差。带有40密耳记录表db盒。我的经验。请参阅inno db表大小和内存大小。对于20密耳记录db,8G太小。使用100 mil record db box,我计划将内存从12G更改为24G。| innodb_buffer_pool_size | 33554432 | innodb_log_buffer_size | 4194304 |但这项技术是否实时显示行数,而不是缓存值?我猜MySQL不需要触摸表格就可以给出选择countdata\u not\u storage\u in\u table的结果。对于InnoDB表格,这几乎不会显示正确的值,但是随机值和随机值之间的巨大差异非常值得了解,谢谢,我们在表中有355870477行,因此count*/count1即将消亡。如果我需要使用where@peimanF. 使用where的唯一方法是使用标准计数查询并等待。
mysql> explain select count(1) from history;
+----+-------------+---------+-------+---------------+-----------+---------+------+----------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------+-------+---------------+-----------+---------+------+----------+-------------+
| 1 | SIMPLE | history | index | NULL | history_1 | 12 | NULL | 17227419 | Using index |
+----+-------------+---------+-------+---------------+-----------+---------+------+----------+-------------+
1 row in set (0.01 sec)