标签: select

Like 查询如何与索引表一起使用

我正在 Spring-java 和 mysql 工作。

我必须查询尺寸表100k records。表有 10 列。在我的 sql select 查询中,我必须在 4 列上使用 %text% 搜索进行类似的查询。这 4 列是 varchar(200),平均文本大小为 30 个字符。

我浏览了一些博客和答案来了解索引,读完后我想到了这个问题。

将这 4 列单独FULLTEXT索引,会影响类似查询的执行时间吗?

谢谢

mysql index select

5
推荐指数
1
解决办法
7464
查看次数

如何在MySQL中选择所有列加上一个别名列

这是一个简单的问题,但我找不到答案。

我想使用SELECT *语句选择表中的所有列,但我还需要通过这种方式为 UUID 列添加别名:BIN_TO_UUID(ID) as ID

我需要这样的东西:

SELECT BIN_TO_UUID(ID) AS ID, * FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)

另外,最好删除别名的原始列,以免同一列两次具有不同的名称,但前提是这不会向查询添加更多文本,因为我将不得不对所有 16 个表重复此操作。

mysql query select alias mysql-8.0

5
推荐指数
1
解决办法
2万
查看次数

如何提高使用 LIKE %abc 的 where 子句的性能?

我有下面的 select 语句,结果非常慢(41 秒)

SELECT DISTINCT a.Doc_Resource_ID 
       ,a.Parent_ID 
       ,a.Logical_Path 
       ,a.lvl 
       ,CAST(SUBSTRING(a.Security_Level, 21, 1) AS TINYINT)
  FROM Doc_ACL_Detail_D a   
 WHERE a.UserId = @I_vUserId 
   AND @I_vParentId = 0 
    OR (Logical_Path LIKE(CASE 
                             WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId)) 
                          END)
    OR Logical_Path LIKE(CASE 
                            WHEN @I_vParentId>0 THEN '%-'+LTRIM(STR(@I_vParentId))+'-%' 
                         END ))
OPTION (MAXRECURSION 5000)
Run Code Online (Sandbox Code Playgroud)

我已经为表创建了非聚集索引Doc_ACL_Detail_D,但执行计划仍然是表扫描。

我创建的索引:

    CREATE NONCLUSTERED INDEX idx_Doc_ACL_Detail_D_UserId_Logical_Path 
       ON [dbo].[Doc_ACL_Detail_D] ([UserId],[Logical_Path])
  INCLUDE (Parent_ID,Doc_Resource_ID,lvl,Security_Level)
Run Code Online (Sandbox Code Playgroud)

有人可以帮我优化这个语句吗?十分感谢。

performance index sql-server select like

5
推荐指数
1
解决办法
1015
查看次数

SQL Xml 在空记录集上返回空根标记

我正在使用 Sql Server 2005 Express 版本在 xml 输出中显式地生成用户定义的节点。下面的代码工作正常,只是当用户表中不存在记录集时,我无法生成一个空节点。

代码:

select 1 as tag, null as parent,

FirstName as [User!1!FirstName!Element],

LastName as [User!1!LastName!Element]

FROM Users

FOR XML EXPLICIT
Run Code Online (Sandbox Code Playgroud)

输出:

<Users>
<FirstName>Ammy</FirstName>
<LastName>Dammy</LastName>
</Users>
<Users>
<FirstName>Lammy</FirstName>
<LastName>Lolly</LastName>
</Users>
Run Code Online (Sandbox Code Playgroud)

空表的预期输出:

<Users></Users>
Run Code Online (Sandbox Code Playgroud)

注意:我不喜欢这种xsnil方法,欢迎所有其他解决问题的方法

schema sql-server-2005 xml select

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

在不使用 Count 函数的情况下检索行数

我在下面写了一个查询,它给我一个语法错误,为什么会这样做,

SELECT MAX('Row') FROM 

(SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) 'Row' FROM USERS)
Run Code Online (Sandbox Code Playgroud)

错误描述:

Incorrect syntax near ')'.
Run Code Online (Sandbox Code Playgroud)

我不明白:(

sql-server-2005 count select

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

SELECT 有 INSERT 子句吗?

我知道表格

Select * into new_table from old_table
Run Code Online (Sandbox Code Playgroud)

陈述。Bur 最近我在这里这里找到了 2 个帖子,它们使用它

SELECT * FROM NhlPlayer
INSERT INTO PlayerBackups
Run Code Online (Sandbox Code Playgroud)

我在msdn 中什么也没找到,这是一些新语法还是只是一个错误?我猜后者是因为

INSERT INTO PlayerBackups
SELECT * FROM NhlPlayer
Run Code Online (Sandbox Code Playgroud)

会工作得很好。

sql-server select

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

有人可以解释为什么使用 nolock 进行选择会查询更新的数据吗?

我正在阅读这里的答案(来自stackoverflow,我认为应该在这里提问)

NOLOCK 意味着根本不放置锁。

您的查询可能会在单个查询中返回 UPDATE 之前的部分数据和 UPDATE 之后的部分数据。

我知道 nolock 不会锁定表,所以其他人可以同时查询。

从它显示的答案和示例来看,它在数据更新时获取数据。

为什么会这样?

我假设对于普通选择,它会尝试在表上加锁,因此当执行更新语句时,它会在行或页上加锁。然后当我尝试运行 select 语句时,它无法放置锁,直到更新语句锁被释放。

但是在这种情况下因为select语句不会尝试给表加锁,所以它可以运行而无需等待update语句释放锁?

sql-server select nolock

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

当 ID 不同时获取唯一名称(DISTINCT ?)

我有这张桌子:

id  | name
1   | John
2   | John
3   | Peter
4   | Mike
5   | Mike
Run Code Online (Sandbox Code Playgroud)

我想获取唯一名称,获取列表中的最新名称。我可以去:

SELECT DISTINCT name FROM table ORDER BY id DESC LIMIT 2

这会让我:迈克和彼得。都好。但是,我还需要 ID,因此 DISTINCT 不再起作用。什么是正确的查询:

5   |   Mike
3   |   Peter
Run Code Online (Sandbox Code Playgroud)

用词:最新的 2 个独特的条目

mysql select

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

子查询为父查询执行 1 次还是更多?

如果我在 where 子句中应用静态数据,那么应用子查询会更快。例子:

(查询返回5条记录作为结果集)

SELECT STARTDATE, ENDDATE FROM TEST WHERE STARTDATE = '2012-08-21';

然后更快:

SELECT STARTDATE, ENDDATE FROM TEST WHERE STARTDATE = (SELECT STARTDATE FROM TEST2 LIMIT 1);

或者它们在任何情况下都是相同的?

子查询是在每次比较时对每条记录按查询执行还是仅执行 1 次?

mysql select

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

根据日期选择查询

我们有一个表来存储事件。

表有一个像

EventID INT Primary Key
EventName NVARCHAR(100)
StartDate Datetime
EndDate Datetime
Run Code Online (Sandbox Code Playgroud)

所以在前端我们要根据开始时间和结束时间显示事件。从前端,我们将 StartDate 和 EndDate 作为参数传递以获取值。

到目前为止,我们已经采取了像

   Select * from tbl_Events
   where ((startDate BETWEEN @start AND @end) OR (EndDate BETWEEN @start AND @end))
Run Code Online (Sandbox Code Playgroud)

我们有 2 个视图来显示事件 -

  1. 月份视图-这显示所有事件在一个月

  2. 显示当天事件的日视图

假设我有一个开始日期为 2012 年 10 月 23 日和结束日期为 2012 年 10 月 27 日的事件。

而我通过@StartDate as 24 Oct 2012@EndDate as 25 OCt 2012

根据上面的查询,它在Month 视图中工作。但它在白天视图中不起作用。

任何人都可以帮我修改查询以在这两种情况下工作

sql-server select

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