假设我们有3个表(实际上我目前有2个表,但这个例子可能更好地说明了这个想法):
[人]
[组]
[角色]
[PersonGroupRole]
如果PersonGroupRole关系中的3个ID中的任何一个被标记为PRIMARY键,还是它们都应该被合并为一个复合词?这样做的真正好处是什么?
据我所知,我可以加入,所以Person JOIN PersonGroupRole JOIN Group给了我哪些人在哪些组等.
我将在SQL-express和SQL-server之上使用LINQ/C#/ .NET,因此如果有任何关于语言/ SQL的原因可能会使选择更加明确,那就是我要求的平台.
期待看到弹出的答案,因为我在组合时会多次考虑这些主键/索引.
编辑:
好吧,问题是被误解我现在可以看到.
问题在于,如果将PersonGroupRole中的三个ID标记为PRIMARY KEYS用于索引目的是有意义的.这是否会为加入三个表中的每个表增加额外的速度,或者它们是否应该在PersonGroupRole表中没有PRIMARY KEY且在单独的表中只是Primary.
对不起,关于混乱.将尝试更好地解释我的问题.
好的,我有两个MYSQL表:
CREATE TABLE `sessions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userID` int(11) NOT NULL,
`runTime` int(11) NOT NULL,
`monstersKilled` int(11) NOT NULL,
`profit` int(11) NOT NULL,
`tasks` int(11) NOT NULL,
`xpGain` int(11) NOT NULL,
`lastupdate` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
Run Code Online (Sandbox Code Playgroud)
和,
CREATE TABLE `users` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`user` text NOT NULL,
`pass` text NOT NULL,
`paypal` text NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '0',
`strikes` int(11) NOT NULL DEFAULT '0',
`session` text NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我继承了一个SSIS包,它将500K行(大约30列)加载到一个临时表中.
现在已经烹饪了大约120分钟并且没有完成 - 这表明它的运行速度低于每秒70行.我知道每个人的环境都不一样,但我认为这与"典型"的情况相差几个数量级.
奇怪的是,登台表在INT(标识)列上有一个PK约束 - 现在我认为它可能会妨碍负载性能.登台表上没有其他约束,索引或触发器.
有什么建议?
----附加信息------
源是一个制表符分隔文件,它连接到两个单独的数据流组件,这些组件将一些静态数据(运行日期和批处理ID)添加到流中,然后连接到OLE DB目标适配器
访问模式是使用FastLoad的OpenRowset
FastLoadOptions是TABLOCK,CHECK_CONSTRAINTS
最大插入提交大小:0
编辑:请回答我问的两个答案中的一个.我知道在不同情况下还有其他选择会更好.这些其他可能的选项(对表进行分区,作为一个大型删除语句运行,无需批量提交等)在我的情况下不是选项,因为我无法控制.
我有几个非常大的表要删除.所有都具有索引的相同外键.我需要从所有表中删除某些记录.
table source
id --primary_key
import_source --used for choosing the ids to delete
table t1
id --foreign key
--other fields
table t2
id --foreign key
--different other fields
Run Code Online (Sandbox Code Playgroud)
通常在执行这样的删除时,我会组合一个循环来逐步执行所有ID:
declare
my_counter integer := 0;
begin
for cur in (
select id from source where import_source = 'bad.txt'
) loop
begin
delete from source where id = cur.id;
delete from t1 where id = cur.id;
delete from t2 where id = cur.id;
my_counter := my_counter + …Run Code Online (Sandbox Code Playgroud) 我有一个存储数据的列(42,12).现在我想获取42或12(两个不同的选择查询).我搜索并发现了一些类似但更复杂的场景.这有什么简单的方法吗?我正在使用MSSQL Server 2005.
鉴于总会有两个值,它们将是整数
我想选择某个列不是我指定的值的所有字段.
我尝试了这个,但它没有用.
SELECT *
FROM table
WHERE columnname != value
Run Code Online (Sandbox Code Playgroud)
这是另一个错误,所以我认为!=操作员错了,因为这是我第一次使用它.对不起大家!
我想做这个
SELECT *
FROM sales_order_header
WHERE order_reference LIKE @order_reference + '%'
AND ((@booked_in IS NULL) OR ( booked_in = @booked_in))
AND ((@depot_assigned IS NULL) OR ( IF @depot_assigned = 'Y' depot_code <> ' ' ELSE depot_code = ' ') )
Run Code Online (Sandbox Code Playgroud)
我相信你们都可以猜到OR(IF @dede_assigned等)位失败了.
我该怎么做这样的事情,或者我必须根据@depot_assigned参数的值将它作为两个单独的select语句来完成.
听起来可能很复杂,但事实并非如此.我有一个名为"orders"的表,其中包含以下字段:
id INT(11) auto_increment,
realid INT(14)
Run Code Online (Sandbox Code Playgroud)
现在,我希望在每个插入到此表中,执行以下操作:
INSERT INTO orders VALUES (null, id+1000);
Run Code Online (Sandbox Code Playgroud)
但是我会在目前在线的商店里做这件事,我想在5分钟内改变一切.这样的事情会起作用吗?如果没有,我该怎么做?
我有一个表文件夹,如果该文件夹具有父级,则该列的parent_id引用ID,如果没有,则parent_id为null。那是好的解决方案,还是该连接或其他解决方案需要额外的表?外键可以根本为null吗,如果可以,此解决方案将有更大的执行时间?
table folder(
id int primary key, //primary key in my table
parent_id int references id, //foreign key on id column in same table
....
)
Run Code Online (Sandbox Code Playgroud) sql ×9
sql-server ×4
mysql ×3
php ×2
foreign-keys ×1
linq-to-sql ×1
optimization ×1
oracle ×1
ssis ×1
t-sql ×1