我的SELECT查询应该运行多快?0.25秒看起来真的很慢



在某个Select查询中挣扎,每当我正在搜索的记录的id增加到100k行以上的值时,似乎要花费大量时间。

查询非常简单:

SELECT * FROMtableWHEREobject_id= '1' ANDobject_processed= '0' ANDobject_processing= '0' LIMIT 1

当我有更少的记录时,执行这个查询大约需要0.01秒,但是在某个阈值之后,它似乎突然从看起来相当正常的执行时间增加到0.25秒的相当慢的时间!

考虑到我正在对这个查询进行数千次迭代的循环,这是非常关键的,所以它对我的应用程序有很大的影响。

我已经索引了这个查询中的所有列(object_id, object_processed, object_processing),但它似乎没有帮助。

任何MySQL设置在特定的我应该寻找解决这个问题?

这是我的mysql cfg(在一个64gb RAM的服务器上)

wait_timeout = 25000
interactive_timeout = 25000
symbolic-links=0
open_files_limit=12000
max_connections=5000
max_user_connections=10000
innodb_buffer_pool_size=40G
innodb_thread_concurrency = 34
innodb_flush_log_at_trx_commit = 2
innodb_buffer_pool_instances=20
thread_cache_size = 100
join_buffer_size = 4M
tmp_table_size = 256M
innodb_autoextend_increment=512
max_allowed_packet = 16M
max_heap_table_size = 256M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
key_buffer_size = 64M

如果你能帮助我,我将非常感激!

感谢

这个查询需要

INDEX(object_id, object_processed, object_processing)

(该组合索引中列的顺序无关)

没有ORDER BYLIMIT会得到一个随机行;这样可以吗?

唯一重要的可调项是innodb_buffer_pool_size,您可以将其设置为合理的值。

max_connections=5000是不切实际的高。除非你有很好的理由,否则把它降低到200。

相关内容

最新更新