使用varchar列的MySQL拆分表查询
我在MySQL中有一个表,我想通过执行多个select语句来并行查询它 表中不重叠的相等部分,如:使用varchar列的MySQL拆分表查询,mysql,sql,Mysql,Sql,我在MySQL中有一个表,我想通过执行多个select语句来并行查询它 表中不重叠的相等部分,如: 1. select * from mytable where col between 1 and 1000 2. select * from mytable where col between 1001 and 2000 ... 问题是我的例子中的col是varchar。在这种情况下,如何拆分查询? 在Oracle中,我们可以将NTILE与rowids结合使用。但我在MySQL中没有找到类似的方
1. select * from mytable where col between 1 and 1000
2. select * from mytable where col between 1001 and 2000
...
问题是我的例子中的col是varchar。在这种情况下,如何拆分查询?在Oracle中,我们可以将NTILE与rowids结合使用。但我在MySQL中没有找到类似的方法。 这就是为什么我的想法是对col值进行散列,并根据我想要的相等部分的数量对其进行修改。 或者可以使用动态生成的rownum代替哈希。
考虑到表很大(xxxM行),我希望避免满表,什么是最佳解决方案
扫描每个查询?您可以使用
limit
进行分页,因此您将有:
1. select * from mytable limit 0, 1000
2. select * from mytable limit 1000, 1000
您可以将varchar列转换为整数,如此转换(col as int) 问候
Tushar如果不扫描fulltable,它将生成结果
SELECT * FROM mytable
ORDER BY ID
OFFSET 0 ROWS
FETCH NEXT 100 ROWS ONLY
如果可能的话,我想避免全表扫描。你仍然想从表中读取,对吗?那么,您希望如何避免“全表扫描”?什么是“全表扫描”?据我所知,limit 0,1000不会读取所有表,它会在找到符合条件的前1000条记录后停止读取。如果是Oracle,则您拥有指向给定行的物理地址的rowid。我正在为MySQL寻找一种类似的方法(或另一种最佳方法)。限制A,B的问题是,它会导致A+B行扫描。即:检索A+B记录,然后删除A记录。对于使用这种分页的webapp来说是不错的,但是对于检索1B行来说,这并不重要。如何将字符序列强制转换为整数?