有没有办法让Oracle查询表现得像包含一个MySQL limit子句?
在MySQL,我可以这样做:
select *
from sometable
order by name
limit 20,10
Run Code Online (Sandbox Code Playgroud)
获得第21行到第30行(跳过前20行,给出下一行10).在行之后选择行order by,因此它实际上按字母顺序从第20个名称开始.
在Oracle,人们提到的唯一的事情是rownum伪列,但它之前 进行了评估order by,这意味着:
select *
from sometable
where rownum <= 10
order by name
Run Code Online (Sandbox Code Playgroud)
将返回按名称排序的十行的随机集合,这通常不是我想要的.它也不允许指定偏移量.
我保存在一个目录中的文件数量是否重要?如果是这样,目录中有多少文件太多,文件太多会有什么影响?(这是在Linux服务器上.)
背景:我有一个相册网站,上传的每个图像都重命名为8位十六进制数字(例如a58f375c.jpg).这是为了避免文件名冲突(例如,如果上传了大量"IMG0001.JPG"文件).原始文件名和任何有用的元数据都存储在数据库中.现在,我在images目录中有大约1500个文件.这使得列出目录中的文件(通过FTP或SSH客户端)需要几秒钟.但我看不出它除此之外还有什么影响.特别是,对于向用户提供图像文件的速度似乎没有任何影响.
我想过通过制作16个子目录来减少图像数量:0-9和af.然后我会根据文件名的第一个十六进制数字将图像移动到子目录中.但我不确定是否有任何理由这样做,除了偶尔通过FTP/SSH列出目录.
在不合时宜的时刻我几次反对这个问题:
为什么存在此限制?
为什么还没有被删除?
你如何应对路径限制?...而且,切换到Linux或Mac OS X不是这个问题的有效答案;)
MySQL数据库表的记录上限是多少.我想知道自动增量领域.如果我添加数百万条记录,会发生什么?如何处理这种情况?谢谢!
在PostgreSQL中,有一些Limit和Offset关键字可以很容易地对结果集进行分页.
Sql Server的等效语法是什么?
我正在尝试做类似的事情:
SELECT * FROM table LIMIT 10,20
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM table LIMIT 10 OFFSET 10
Run Code Online (Sandbox Code Playgroud)
但是使用SQL Server
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM sys.databases
) a WHERE row > 5 and row <= 10
Run Code Online (Sandbox Code Playgroud)
我还发现:
SELECT TOP 10 * FROM stuff;
Run Code Online (Sandbox Code Playgroud)
...但这不是我想要做的,因为我无法指定起始限制.
我还有另一种方法吗?
另外,只是好奇,有没有一个理由为什么SQL Server不支持该LIMIT功能或类似的东西?我不想吝啬,但这听起来像DBMS需要的东西......如果确实如此,那么我很抱歉这么无知!我在过去的5年里一直在使用MySQL和SQL +所以......
简而言之:一个包含超过1600万条记录的表[大小为2GB].使用ORDER BY*primary_key时,使用SELECT的LIMIT偏移越高,查询变得越慢
所以
SELECT * FROM large ORDER BY `id` LIMIT 0, 30
Run Code Online (Sandbox Code Playgroud)
远远不及
SELECT * FROM large ORDER BY `id` LIMIT 10000, 30
Run Code Online (Sandbox Code Playgroud)
这也只能订购30条记录.所以这不是ORDER BY的开销.
现在,当获取最新的30行时,大约需要180秒.如何优化该简单查询?
我对Sqlite有一个简单的问题.这有什么区别:
Select * from Animals LIMIT 100 OFFSET 50
Run Code Online (Sandbox Code Playgroud)
和
Select * from Animals LIMIT 100,50
Run Code Online (Sandbox Code Playgroud) 我知道ls -t会按修改时间列出所有文件.但是,如何将这些结果仅限于最后n个文件?
limit ×10
sql ×3
mysql ×2
pagination ×2
sql-server ×2
database ×1
filesystems ×1
http-get ×1
linux ×1
list ×1
ls ×1
offset ×1
oracle ×1
path ×1
performance ×1
sql-order-by ×1
sqlite ×1
terminal ×1
windows ×1