标签: sql

当OR时,为什么SQL FullText查询会变慢?

在SQL Server(2008年),我有两列的全文索引,给他们打电话Table1.FirstNamesTable2.LastNames.在分析了一些查询之后,我想出了以下结果:

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR CONTAINS(LastNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)

=> 31 197ms

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE (FirstNames LIKE '%Bob%') OR CONTAINS(LastNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)

=> 1941ms

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob') OR LastNames LIKE '%Bob%'
Run Code Online (Sandbox Code Playgroud)

=> 3201ms

SELECT *
FROM (Table1 LEFT JOIN Table2 ON Table1.SomeKey=Table2.SomeKey)
WHERE CONTAINS(FirstNames, 'Bob')
Run Code Online (Sandbox Code Playgroud)

=> 565ms

SELECT *
FROM (Table1 LEFT JOIN …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance

11
推荐指数
1
解决办法
2002
查看次数

如何用SQL连接2个以上的字段?

我试图使用CONCAT与SQL连接3个字段,并得到以下错误:

调用本机函数'CONCAT'时参数不正确

查询如下

SELECT CONCAT(guests.lastname,', ',guests.firstname', ',guests.passport) AS display 
  FROM guests 
 WHERE guests.uuid = '1'
Run Code Online (Sandbox Code Playgroud)

如何在SQL中连接两个以上的字段?

mysql sql

11
推荐指数
1
解决办法
4万
查看次数

用于存储排名位置的MySQL更新语句

我正试图绕过一个查询而我无法理解它.如果有人给我指针,我将不胜感激.作为我想要实现的一个简单示例,我在数据库中有这些记录

Score|Ranking
-------------
100  |0
200  |0
300  |0
Run Code Online (Sandbox Code Playgroud)

我希望排名字段包含1,2,3根据谁获得最高分,所以结果应该是:

Score|Ranking
-------------
100  |3
200  |2
300  |1
Run Code Online (Sandbox Code Playgroud)

目前,我正在为所有这些记录做下一个循环,但实际上这可能是几千 - 这可能需要永远!有没有人对魔术查询有一个想法,可以一次性做到这一点?

mysql sql ranking sql-update

11
推荐指数
3
解决办法
1万
查看次数

30 +小时查询的最佳架构

我有一个有趣的问题要解决.我的一位客户让我开发了一个库存分析程序,该程序具有近千年符号的近50年库存数据.我已经开发了一系列过滤器,可以在任何一天使用,看看是否有什么东西可以用于交易.

我们希望为每个库存的每天数据运行此过滤器.基本上是您的开始和结束日期类型报告.但是,每个符号需要每周过滤6分钟.我们计算大约40个小时左右来运行整个数据集的报告.

最重要的要求是我的客户能够在任何地方从任何计算机上做任何事情(他经常旅行),所以我们是基于浏览器的.

为了解决这个问题,我编写了一个运行此报告的异步方法,但应用程序池不活动计时器将终止该作业.我不想开始调整整个应用程序的超时以支持这一个报告(我们将做很多这样的事情,因为每个库存场景需要在我们的整个数据集上运行以进行分析才能用于积极交易).

有没有人对支持超长期异步过程的Web架构有任何一般想法或经验?

谢谢

sql wcf asynchronous

11
推荐指数
3
解决办法
644
查看次数

用于几乎相似值搜索的算法

PersonsSQL Server 2008中有表.

我的目标是找到地址几乎相似的人.

地址与列描述state,town,street,house,apartment,postcodephone.

由于某些州(非美国)和人为因素(地址错误等)存在某些特定差异,因此地址不会以相同的模式填充.

地址中最常见的错误

  1. 区分大小写
  2. 有人写了"apt.",另一个是"公寓"或"ap".(虽然地址不是用英文写的)
  3. 空格,圆点,逗号
  4. 写街道名称的差异,比如'博士 Jones str."或"琼斯医生街"或"D.乔恩.st."或"琼斯博士"等

主要问题是数据不是相同的模式,因此很难找到类似的地址.

这种问题有什么算法吗?

提前致谢.

UPDATE

  1. 正如我所提到的,地址分为不同的列.我应该生成字符串连接列还是为每列执行步骤?我假设我不应该连接列,但如果我将单独比较列,我应该如何组织它?我是否应该找到每个列的相似性,将它们联合起来或相交或其他什么?
  2. 我应该收集一些统计数据还是某种教育算法?

sql sql-server algorithm string-comparison

11
推荐指数
2
解决办法
4902
查看次数

使用后备语言检索i18n数据

我必须从数据库中获取i18n文本.默认语言是英语,它包含所有内容的文本.但非英语语言不一定具有所有期望的翻译.如果某个实体/密钥的非英语翻译在数据库中不可用,那么我想让它返回英文文本.所以,英语是这里的后备语言.

i18n文本表看起来像这样(PostgreSQL方言):

CREATE TABLE translation (
    id SERIAL PRIMARY KEY,
    language_code CHAR(2) NOT NULL,
    key VARCHAR(20) NOT NULL,
    value TEXT NOT NULL,
    CONSTRAINT translation_unique UNIQUE (language_code, key)
)
Run Code Online (Sandbox Code Playgroud)

数据如下所示:

INSERT INTO translation 
    (language_code, key, value) 
VALUES
    ('en', 'foo', 'foo in English'),
    ('nl', 'foo', 'foo in Nederlands (Dutch)'),
    ('en', 'bar', 'bar in English')
Run Code Online (Sandbox Code Playgroud)

我想基本上做下面的伪SQL查询:

SELECT key, value 
FROM translation 
WHERE (language_code = 'nl' OR IF value IS NULL THEN language_code = 'en')
Run Code Online (Sandbox Code Playgroud)

(实际上,该'nl'值是参数化的)

这样它返回以下内容:

+-----+---------------------------+ …

sql postgresql fallback internationalization

11
推荐指数
1
解决办法
1809
查看次数

联合Postgres中的GeomUnion等SQL Server表中的所有几何体

只是为了澄清前面:我说的是联合几何,而不是SQL关键字UNION.

我正在尝试将Postgres中的一些空间数据与PostGIS一起移动到SQL Server 2008.直到我看到这样的语句之后才好了:

SELECT GeomUnion(the_geom) FROM some_table
Run Code Online (Sandbox Code Playgroud)

这个联合该列中的所有几何体并将其作为一个结果返回(类似于COUNT工作方式).据我所知,SQL Server只具有将STUnion一个几何与另一个几何结合的功能.有没有办法做类似于Postgres的方式?

如果它有帮助,该STUnion功能的工作方式如下:

SELECT first_geometry_column.STUnion(second_geometry_column) FROM some_table
Run Code Online (Sandbox Code Playgroud)

sql spatial sql-server-2008

11
推荐指数
3
解决办法
1万
查看次数

返回NEWSEQUENTIALID()作为输出参数

想象一下这样的表:

CREATE TABLE [dbo].[test](
     [id] [uniqueidentifier] NULL,
     [name] [varchar](50) NULL
)

GO

ALTER TABLE [dbo].[test] ADD  CONSTRAINT [DF_test_id]  DEFAULT (newsequentialid()) FOR [id]
GO
Run Code Online (Sandbox Code Playgroud)

使用如下所示的INSERT存储过程:

CREATE PROCEDURE [Insert_test]
    @name as varchar(50),
    @id as uniqueidentifier OUTPUT
AS
BEGIN
    INSERT INTO test(
        name
    )
    VALUES(
        @name
    )
END
Run Code Online (Sandbox Code Playgroud)

获取刚刚插入的GUID并将其作为输出参数返回的最佳方法是什么?

sql sql-server

11
推荐指数
1
解决办法
3250
查看次数

获取列名称

我需要使用VBA或Access SQL获取表的所有列名,并迭代它们进行验证,有没有人有解决方案,我搜索谷歌无济于事.

sql ms-access vba

11
推荐指数
2
解决办法
4万
查看次数

如何使用SQL在数据库中插入当前日期和时间?

我使用了以下代码,但SQL中的DateTime字段表示为:

2005-04-08 00:00:00
Run Code Online (Sandbox Code Playgroud)

我也想要时间.我应该改变什么?

这是我的代码如下:

// Get the system date and time.
java.util.Date utilDate = new Date();
// Convert it to java.sql.Date
java.sql.Date date = new java.sql.Date(utilDate.getTime());
...
...
...
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setDate(1, date);
Run Code Online (Sandbox Code Playgroud)

java sql

11
推荐指数
2
解决办法
6万
查看次数