Mat*_*ers 3 sql asp.net performance
我有一个有两个varchar(Max)列的表
Column 1 Column 2
-----------------------
URLRewitten OriginalURL
Run Code Online (Sandbox Code Playgroud)
我的网址部分重写为asp.net webforms网站.
当一个网址进来时,我会检查它是否在表格中,如果我使用的是OriginalURL.
我的问题是,如果我正在做的是查询表中的URL,并且数据库中没有其他表将链接到此表是否需要专用的主键字段?像一个自动编号?这会使查询更快吗?
以及如何让查询运行得更快?
编辑:我对URLRewitten有一个独特的约束.
编辑:我正在使用这张桌子的方式..
这就是我所做的所有查询..此刻.
两列一起是唯一的.
Ada*_*son 12
你需要一把钥匙吗?是.总是.但是,看起来在你的情况下,OriginalURL可能是你的主键(我假设对于OriginalURL中的给定值,URLRewritten的值不会超过一个).
这就是所谓的"自然键"(数据本身的一个组成部分本质上是唯一的).这些可能很方便,但我发现它们在大多数情况下通常比它们的价值更麻烦,所以是的,我会推荐某种不透明的键(意思是与行中的数据无关的键) ,除了识别单行).您是否想要自动编号取决于您自己.它当然很方便,虽然标识列有自己的优点和缺点.
现在我想我会建议创建两件事:
无论如何我会在那里放一个...它会使更新更容易或复制现有规则......
即这更容易
UPDATE Rules SET OriginalURL = 'http://www.domain.com' WHERE ID = 1
--OR
INSERT INTO Rules SELECT OriginalUrl, NewUrl FROM Rules WHERE ID = 1
Run Code Online (Sandbox Code Playgroud)
比这个
这更容易
UPDATE Rules SET OriginalURL = "http://www.domain.com" WHERE OriginalURL = 'http://old.domain.com'
--OR
INSERT INTO Rules SELECT OriginalUrl, NewUrl FROM Rules WHERE OriginalURL = 'http://old.domain.com'
Run Code Online (Sandbox Code Playgroud)
在性能方面,如果您要通过OriginalURL进行搜索,则应该为该列添加索引,