mysql快速计数_Mysql计数性能非常大的表

我在Innodb拥有超过1亿行的桌子。

我必须知道是否有超过5000行的外键= 1。

我不需要确切的数字。

我做了一些测试:

SELECT COUNT(*)FROM table WHERE fk = 1 => 16秒

SELECT COUNT(*)FROM table WHERE fk = 1 LIMIT 5000 => 16秒

SELECT primary FROM table WHERE fk = 1 => 0.6秒

我会有一个更大的网络和治疗时间,但它可以是15.4秒的超载!

你有更好的主意吗?

谢谢

编辑:[添加OP的相关评论]

我尝试SELECT SQL_NO_CACHE COUNT(fk)FROM table WHERE fk = 1,但花费了25秒

Mysql针对Innodb与Mysql Tuner进行了调优。

CREATE TABLE table ( pk bigint(20) NOT NULL AUTO_INCREMENT,

fk tinyint(3) unsigned DEFAULT '0',

PRIMARY KEY (pk), KEY idx_fk (fk) USING BTREE )

ENGINE=InnoDB AUTO_INCREMENT=100380914 DEFAULT CHARSET=latin1

DB资料:

'have_innodb', 'YES' 'ignore_builtin_innodb', 'OFF' 'innodb_adaptive_hash_index', 'ON'

'innodb_additional_mem_pool_size', '20971520' 'innodb_autoextend_increment', '8'

'innodb_autoinc_lock_mode', '1' 'innodb_buffer_pool_size', '25769803776'

'innodb_checksums', 'ON' 'innodb_commit_concurrency', '0',

'innodb_concurrency_tickets', '500' 'innodb_data_file_path',

'ibdata1:10M:autoextend' 'innodb_data_home_dir', '', 'innodb_doublewrite', 'ON'

'innodb_fast_shutdown', '1' 'innodb_file_io_threads', '4'

'innodb_file_per_table', 'OFF', 'innodb_flush_log_at_trx_commit', '1'

'innodb_flush_method', '' 'innodb_force_recovery', '0' 'innodb_lock_wait_timeout', '50'

'innodb_locks_unsafe_for_binlog', 'OFF' 'innodb_log_buffer_size', '8388608'

'innodb_log_file_size', '26214400' 'innodb_log_files_in_group', '2'

'innodb_log_group_home_dir', './' 'innodb_max_dirty_pages_pct', '90'

'innodb_max_purge_lag', '0' 'innodb_mirrored_log_groups', '1' 'innodb_open_files',

'300' 'innodb_rollback_on_timeout', 'OFF' 'innodb_stats_on_metadata', 'ON'

'innodb_support_xa', 'ON' 'innodb_sync_spin_loops', '20' 'innodb_table_locks', 'ON'

'innodb_thread_concurrency', '8' 'innodb_thread_sleep_delay', '10000'

'innodb_use_legacy_cardinality_algorithm', 'ON'

更新’15:

到目前为止,我使用了相同的方法,每天有6亿行和640 000行。它仍然正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值