gpt4 book ai didi

mysql - 使用 phpmyadmin 的 GUI 更改字段类型与使用 alter table 会产生不同的行为

转载 作者:行者123 更新时间:2023-11-30 21:25:36 25 4
gpt4 key购买 nike

我的数据库有两个表:付款和预订。

付款表有 50 万行,我有这个简单的查询:

select * from payments where payments.booking_id in(64791, 64792,...,65791)

in 运算符中有 1000 个预订 ID。

这里是 mysql 的 explain 的输出。这表明我的表 payments 索引没有被使用,取而代之的是 mysql 对 payments 表进行了全面扫描。执行大约需要 800~900 毫秒。(很多)

Output of explain

经过一些搜索,我发现 bookings.id 字段是 unsigned int(10) 而 payments.booking_id 是 signed int(11)。所以 mysql 必须对 unsigned int(10) 执行 1000 次转换才能使用我的索引。

如下所示,通过从 phpmyadmin 的 GUI 更改 payments.booking_id 字段类型解决了我的问题。

Changing payments.booking_id from phpmyadmin's graphical user interface

现在我的查询使用我的索引并在 33 毫秒内执行

explain output after booking_id change using phpmyadmin's GUI

我的问题是,当我使用 mysql 的 alter table 执行相同的更改时:

ALTER TABLE payments CHANGE booking_id booking_id INT(10) UNSIGNED NULL DEFAULT NULL;

原始查询一直没有使用我的索引。

我试过了

  1. 删除并重新创建索引
  2. 通过RESET QUERY CACHE;重置查询缓存
  3. 重启mysql服务器

没有成功

我正在使用:

  • phpmyadmin: 4.9.0.1
  • mysql-server: 10.3.16-MariaDB

最佳答案

我认为您在 NULLNOT NULL 方面存在不一致。

关于mysql - 使用 phpmyadmin 的 GUI 更改字段类型与使用 alter table 会产生不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59238429/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com