作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道为什么这个查询需要 45 分钟才能给我结果
table1= 831293 行
table2= 2000.000 行
SELECT ID, name FROM table1 WHERE name not IN (SELECT name FROM table2 ) LIMIT 831293
my.cnf 文件看起来像这样:
max_allowed_packet = 64M
innodb_buffer_pool_size = 8G
innodb_log_file_size = 256M
query_cache_type = 1
query_cache_limit = 1M
最佳答案
你有名字的索引吗?
如果每次都必须在每行中循环遍历 table2,则实际上循环了 831293*200000 行,这是很多。
当你有一个关于名字的索引时,你可以得到一个主要的性能提升,因为在这个索引中搜索一个名字会更容易。 (甚至可能是 O(1),因为可能会有一个哈希表)
您可以按如下方式进行
ALTER TABLE `table2` ADD INDEX (`name`)
关于MYSQL (NOT IN) 查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24171446/
我是一名优秀的程序员,十分优秀!