我有一张桌子上有一个' url' column - VARCHAR(2000)
所以它可以是一个非常长的字符串比较
检查表格中是否已有网址的最佳方法是什么
我需要一个可靠且优化的查询
SELECT COUNT(*) FROM mytable WHERE url='http://www.example.com'
并检查结果是否为0
SELECT COUNT(*) FROM mytable WHERE url LIKE 'http://www.example.com'
并检查结果是否为0
注意:我正在使用MySQL,但您可以自由地为其他DBMS提供答案
答案 0 :(得分:4)
如果我想知道值是否存在,请使用EXISTS
:
SELECT CASE WHEN EXISTS(SELECT 1 FROM mytable WHERE url='http://www.example.com/test.html?arg=blabla')
THEN 1 ELSE 0 END AS UrlExists
答案 1 :(得分:3)
其他答案没有解释您的版本的问题。你的两种配方是等同的,同样糟糕。问题是count(*)
必须在返回计数之前找到与url的所有匹配项。但是,对于您的问题,您不需要计数,只需要一个表示存在的标志。
最佳解决方案以url
上的索引开头。 =
和like
都可以利用索引,因此它们之间应该存在最小的性能差异。
然后巴马尔的方法或蒂姆的方法将非常有效。
答案 2 :(得分:2)
您可以使用:
SELECT 1
FROM mytable
WHERE url = 'http://www.example.com'
LIMIT 1
一旦找到第一场比赛,就会停止搜索。然后只测试查询是返回0行还是1行。
如果url
列上有索引,则查询的所有变体在性能上都非常相似。但如果没有idex,那么这应该和你能得到的一样快。它将进行线性搜索,但只有在URL不存在时才需要搜索整个表格。