SQL - 检查表字段中是否已存在字符串

时间:2014-12-11 14:54:31

标签: mysql sql

我有一张桌子上有一个' url' column - VARCHAR(2000)

所以它可以是一个非常长的字符串比较

检查表格中是否已有网址的最佳方法是什么

我需要一个可靠且优化的查询

选项1

SELECT COUNT(*) FROM mytable WHERE url='http://www.example.com'

并检查结果是否为0

选项2

SELECT COUNT(*) FROM mytable WHERE url LIKE 'http://www.example.com'

并检查结果是否为0

还是其他什么?

注意:我正在使用MySQL,但您可以自由地为其他DBMS提供答案

3 个答案:

答案 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不存在时才需要搜索整个表格。