我正在 Spring-java 和 mysql 工作。
我必须查询尺寸表100k records。表有 10 列。在我的 sql select 查询中,我必须在 4 列上使用 %text% 搜索进行类似的查询。这 4 列是 varchar(200),平均文本大小为 30 个字符。
我浏览了一些博客和答案来了解索引,读完后我想到了这个问题。
将这 4 列单独FULLTEXT索引,会影响类似查询的执行时间吗?
谢谢
这是一个简单的问题,但我找不到答案。
我想使用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 个表重复此操作。
我有下面的 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)
有人可以帮我优化这个语句吗?十分感谢。
我正在使用 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方法,欢迎所有其他解决问题的方法
我在下面写了一个查询,它给我一个语法错误,为什么会这样做,
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)
我不明白:(
我知道表格
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)
会工作得很好。
我正在阅读这里的答案(来自stackoverflow,我认为应该在这里提问)
NOLOCK 意味着根本不放置锁。
您的查询可能会在单个查询中返回 UPDATE 之前的部分数据和 UPDATE 之后的部分数据。
我知道 nolock 不会锁定表,所以其他人可以同时查询。
从它显示的答案和示例来看,它在数据更新时获取数据。
为什么会这样?
我假设对于普通选择,它会尝试在表上加锁,因此当执行更新语句时,它会在行或页上加锁。然后当我尝试运行 select 语句时,它无法放置锁,直到更新语句锁被释放。
但是在这种情况下因为select语句不会尝试给表加锁,所以它可以运行而无需等待update语句释放锁?
我有这张桌子:
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 个独特的条目
如果我在 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 次?
我们有一个表来存储事件。
表有一个像
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 个视图来显示事件 -
一月份视图-这显示所有事件在一个月
显示当天事件的日视图
假设我有一个开始日期为 2012 年 10 月 23 日和结束日期为 2012 年 10 月 27 日的事件。
而我通过@StartDate as 24 Oct 2012和@EndDate as 25 OCt 2012
根据上面的查询,它在Month 视图中工作。但它在白天视图中不起作用。
任何人都可以帮我修改查询以在这两种情况下工作