mariadb - mariadb 5.5 上的异常“flat, BNL join”
问题描述
我有两个 mariadb 5.5 实例,每个实例都有完全相同的数据和 my.cnf 参数。(实际上,我已将旧服务器上的所有文件复制到新服务器上。)
当我运行查询时,查询速度很快(< 1 秒)并向我显示查询解释如下...(主机#1)
+------+-------------+-----------------+-------+---------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------------+-------+---------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------+--------+----------------------------------------------+
| 1 | PRIMARY | TABLE1 | index | NULL | PRIMARY | 130 | NULL | 9792 | Using where; Using index |
| 1 | PRIMARY | <derived2> | ref | key0 | key0 | 135 | testdb.TABLE1.COL1,testdb.TABLE1.COL2,testdb.TABLE1.COL3,testdb.TABLE1.COL4,testdb.TABLE1.COL5 | 30 | |
| 2 | DERIVED | TABLE2 | range | PRIMARY | PRIMARY | 8 | NULL | 299012 | Using where; Using temporary; Using filesort |
+------+-------------+-----------------+-------+---------------+---------+---------+------------------------------------------------------------------------------------------------------------------------------------------------------+--------+----------------------------------------------+
另一个长时间运行(超过 15 秒)并向我展示了不同的解释,如下所示......(主机#2)
+------+-------------+-----------------+-------+---------------+-------------------+---------+------+--------+-------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+-----------------+-------+---------------+-------------------+---------+------+--------+-------------------------------------------------+
| 1 | PRIMARY | TABLE1 | index | NULL | PRIMARY | 130 | NULL | 8123 | Using index |
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 294954 | Using where; Using join buffer (flat, BNL join) |
| 2 | DERIVED | TABLE2 | range | PRIMARY | PRIMARY | 8 | NULL | 294954 | Using where; Using temporary; Using filesort |
+------+-------------+-----------------+-------+---------------+-------------------+---------+------+--------+-------------------------------------------------+
当我不小心设置derived_with_keys
到off
主机#1 时,结果与主机#2 相同,我认为主机#1 选择derived_with_keys
了主机#2 没有的操作。
如何强制我的新服务器使用derived_with_keys
?
任何意见,将不胜感激。
解决方案
问题解决了。
有两个不同的字符集。(UTF8 和 LATIN1)
ALTER TABLE TABLE2 CONVERT TO CHARACTER SET UTF8
正常工作后。
谢谢里克詹姆斯。
推荐阅读
- reactjs - 为什么我的 ImageBackground 视图不会延伸到 React Native 中的屏幕底部?
- kotlin - Kotlin 将字符串值转换为正确的表示形式
- ruby-on-rails - Rails 测试错误
- php - PHP如何管理静态和全局变量?
- sql-server - 使用 Partition by function 为每个插入的值添加一个运行总计列
- android - 为同一图像的不同部分设置点击侦听器
- java - Kafka Java Consumer 挂在 Jenkins 上并且没有在本地读取消息
- python - 在python中循环300秒
- c# - 如何在 C# 中读取 msg 附件
- java - 如何将-t参数传递给fabric8 docker-maven-plugin?