Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用varchar列的MySQL拆分表查询_Mysql_Sql - Fatal编程技术网

使用varchar列的MySQL拆分表查询

使用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中没有找到类似的方

我在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中没有找到类似的方法。 这就是为什么我的想法是对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行来说,这并不重要。如何将字符序列强制转换为整数?