如何快速查询MYSQL中不同数据类型的比较

如何快速查询MYSQL中不同数据类型的比较,mysql,join,slowdown,Mysql,Join,Slowdown,1) 我的问题是,当我有两张大桌子,因为它们的尺寸而不能改变时。 现在我必须在一个公共字段上连接它们,然后比较两个表中的一个字段,这两个表有相同的数据,但一个的数据类型是int,另一个是varchar。 我知道我们可以很容易地做到这一点,但当表中有数百万条记录时,比较两种不同数据类型的速度会变慢,我如何才能使它变快 2) 我类似的第二个问题是,当我必须在某个字段(如id)上连接两个表时,这两个表的数据类型都不同。就像一个是int,另一个是char…我怎么能加入这两个表,因为我不能等待很多天 (我

1) 我的问题是,当我有两张大桌子,因为它们的尺寸而不能改变时。 现在我必须在一个公共字段上连接它们,然后比较两个表中的一个字段,这两个表有相同的数据,但一个的数据类型是int,另一个是varchar。 我知道我们可以很容易地做到这一点,但当表中有数百万条记录时,比较两种不同数据类型的速度会变慢,我如何才能使它变快

2) 我类似的第二个问题是,当我必须在某个字段(如id)上连接两个表时,这两个表的数据类型都不同。就像一个是int,另一个是char…我怎么能加入这两个表,因为我不能等待很多天

(我尝试过的一个解决方案是将新表创建为旧表的摘要(通过in-file-out文件)。而我现在在创建表期间将数据类型从char更改为int,然后使用in-file)


如果任何人有任何其他解决方案,请共享

确保转换发生在联接中的第一个表上,这样做:

  • 每行仅发生一次转换
  • 索引可用于连接第二个表
  • 例如:

    select * 
    from table1
    join table2 on table2.intcol = cast(table1.varcharcol as signed)
    

    此示例查询将使用table2.intcol上的索引(如果存在)联接两个表。

    确保联接中的第一个表发生转换,这样:

  • 每行仅发生一次转换
  • 索引可用于连接第二个表
  • 例如:

    select * 
    from table1
    join table2 on table2.intcol = cast(table1.varcharcol as signed)
    
    此示例查询将使用table2.intcol上的索引(如果存在)连接两个表

    Yes cast可用于更改数据类型

    Yes cast可用于更改数据类型

    选择*
    来自表1
    连接表2上的表2.intcol=cast(col as int)
    
    选择*
    来自表1
    连接表2上的表2.intcol=cast(col as int)
    
    thanx我以前不知道cast可以更改数据类型。Thanx我以前不知道cast可以更改数据类型。谢谢你告诉我。