我们遇到了一个有点奇怪的情况.基本上,我们的一个数据库中有两个表格,这些表格是我们不需要或不关心的大量日志信息.部分原因是我们的磁盘空间不足.
我正在试图清理表格,但这是永远的(在周末运行之后仍有57,000,000条记录......而这只是第一张桌子!)
只是使用删除表是永远占用并占用驱动器空间(我相信因为事务日志.)现在我正在使用while循环一次删除记录X,同时玩X来确定实际上最快的.例如,X = 1000需要3秒,而X = 100,000需要26秒......其中数学运算稍快一些.
但问题是,是否有更好的方法?
(完成此操作后,要运行SQL代理作业,请每天清理一次表...但需要先清除它.)
我看到了一些与此相关的其他问题,但它们不是MySQL.
该数据库是一个实时数据库,因此我不想删除并重新创建该表.我只是想让一个列不再是唯一的,这在本质上是不太宽松的,所以它不应该导致任何问题.
我有下面的查询,其中日期是硬编码的.我的目标是删除已编码的日期; 查询应该在运行时拉取上个月的数据.
select count(distinct switch_id)
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XXXX'
and TRUNC(CREATION_DATE) BETWEEN '01-AUG-2012' AND '31-AUG-2012'
Run Code Online (Sandbox Code Playgroud)
我应该使用sysdate-15
功能吗?
在表上执行时,使用CONNECT BY LEVEL似乎返回太多行.发生了什么事情背后的逻辑是什么?
假设如下表:
create table a ( id number );
insert into a values (1);
insert into a values (2);
insert into a values (3);
Run Code Online (Sandbox Code Playgroud)
此查询返回12行(SQL Fiddle).
select id, level as lvl
from a
connect by level <= 2
order by id, level
Run Code Online (Sandbox Code Playgroud)
表A中每行一行,列LVL的值为1,表LV中的每一行为3,其中列LVL为2,即:
ID | LVL ---+----- 1 | 1 1 | 2 1 | 2 1 | 2 2 | 1 2 | 2 2 | 2 2 | 2 3 | 1 3 | …
我在具有区域设置的计算机上运行SQL Server 2008,该区域设置将星期一作为一周的第一天.如果我在表中创建一个计算列来计算日期字段的星期几,那么我得到2表示星期一而不是1.
是否需要设置表或数据库或服务器的某些属性?
我有一系列非常相似的查询,我针对一个包含14亿条记录(带索引)的表运行,唯一的问题是这些查询中至少有10%的执行时间比其他查询多出100倍.
我运行了一个解释计划并注意到快速查询(大约90%)Oracle正在使用索引范围扫描; 在慢速的,它使用完整的索引扫描.
有没有办法强制Oracle进行索引范围扫描?
简单来说,我正在尝试计算其父项所拥有的树的根的百分比,进一步在树上.我怎么能单独用SQL做这个?
这是我的(样本)架构.请注意,虽然层次结构本身很简单,但还有一个额外的holding_id
,这意味着单个父母可以"拥有"他们孩子的不同部分.
create table hierarchy_test (
id number -- "root" ID
, parent_id number -- Parent of ID
, holding_id number -- The ID can be split into multiple parts
, percent_owned number (3, 2)
, primary key (id, parent_id, holding_id)
);
Run Code Online (Sandbox Code Playgroud)
还有一些样本数据:
insert all
into hierarchy_test values (1, 2, 1, 1)
into hierarchy_test values (2, 3, 1, 0.25)
into hierarchy_test values (2, 4, 1, 0.25)
into hierarchy_test values (2, 5, 1, 0.1)
into hierarchy_test values (2, 4, …
Run Code Online (Sandbox Code Playgroud) 我正在使用JPQL查询来检查列表是否包含指定的枚举值.如果枚举值是要检查的单个元素,那么它非常简单.
在查询表达式中,
query = "... where s.status = :status";
Run Code Online (Sandbox Code Playgroud)
然后设置参数
query.setParameter("status", statusValue);
Run Code Online (Sandbox Code Playgroud)
但我想检查下面的内容
query = "... where s.status IN (:statusList)";
Run Code Online (Sandbox Code Playgroud)
where statusList
是一串数字(例如"0,1,2",表示状态值列表)
但我找不到解决方案.我也s.status.ordinal() IN (statusList)
查询过但没有运气.
我正在使用JPA实现:EclipseLink(JPA 2.0)
我的实体的实际名称是 SType
public enum SType
{
REQUISITION,
PURCHASE,
FINISHED,
// others
RETURN;
}
Run Code Online (Sandbox Code Playgroud)
查询:
String querySt = "select s.slipType.slipNameSt,s.slipNumberSt, s.idNr from Slip s
where s.slipType.sType IN (:enumTypeListt)";
em.createQuery(querySt).setParameter("enumTypeList", EnumSet.of(SType.REQUISITION,
SType.PURCHASE));
Run Code Online (Sandbox Code Playgroud) 编写计算给定正数集的Frobenius数的最短程序.Frobenius数是最大数,不能写为集合中数字的正倍数之和.
例如:对于该组中的鸡McNugget的TM尺寸[6,9,20]弗罗贝尼乌斯数为43,因为没有无解的方程*6 + B*9 + C*20 = 43(用A,B ,c> = 0),43是具有此属性的最大值.
可以假设给定集合存在Frobenius数.如果不是这种情况(例如对于[2,4]),则不会出现特定的行为.
参考文献:
[编辑]我决定接受GolfScript版本.虽然MATHEMATICA版本可能被认为是"技术上正确的",但它显然会带来竞争的乐趣.也就是说,我也对其他解决方案印象深刻,特别是Ruby(对于通用语言来说非常简短).
oracle ×5
sql ×4
connect-by ×2
alter-table ×1
code-golf ×1
dayofweek ×1
enums ×1
hierarchy ×1
indexing ×1
java ×1
jpql ×1
mysql ×1
oracle11gr2 ×1
sql-server ×1
unique ×1