刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!
id_1 varchar(20) NOT NULL
这样下面两条语句的结果是一样的:
SELECT * FROM ix_test WHERE id_1=1;
SELECT * FROM ix_test WHERE id_1='1';
执行计划是不同的:
mysql> explain select * from ix_test where id_1=1;
| 1 | SIMPLE | ix_test | index | PRIMARY | PRIMARY | 302 | NULL | 11 | Using where; Using index |
mysql> explain select * from ix_test where id_1='1';
| 1 | SIMPLE | ix_test | const | PRIMARY | PRIMARY | 302 | const | 1 | Using index |
id_1 int(20) NOT NULL
SELECT * FROM ix_test WHERE id_1=1;
SELECT * FROM ix_test WHERE id_1='1';
执行结果和执行计划都是一样的。
mysql sql优化器,对于where后面字段类型为字符串的数字,如果用数字去匹配(就是不用引号引上数字),则不能由索引直接命中,需要全部扫描。
SELECT
ri.order_rec_id
FROM
hqew_order_goods og LEFT JOIN hqew_remove_list ri
ON ri.order_rec_id = CONCAT( og.rec_id, '' ) AND real_removal_numbers > 8888
WHERE
og.order_id = '888888' AND og.removal_numbers > 0
ri.order_rec_id og.rec_id 类型不一样 CONCAT 就非常关键了
本文链接:“数据类型不一致”会走索引吗 ?
版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!