标签: query-hints

让SQL Server使用索引查找+键查找而不是聚集索引扫描,而不使用WITH(FORCESEEK)

版本:SQL Server 2008 R2

数据库:来自http://msftdbprodsamples.codeplex.com/releases/view/55926的 AdventureWorks 2008R2

查询:

SELECT TOP 10
    *
FROM
    Person.Person --WITH (FORCESEEK)
WHERE
    LastName like 'Max%'
    OR EXISTS (
        SELECT
            1
        FROM
            Person.PersonPhone
        WHERE
            Person.PersonPhone.BusinessEntityID = Person.Person.BusinessEntityID
            AND Person.PersonPhone.PhoneNumber LIKE '122%'
    )
ORDER BY Person.Person.BusinessEntityID DESC
Run Code Online (Sandbox Code Playgroud)


没有任何查询提示,SQL Server将使用聚合索引扫描,这是IO密集型:

Table 'PersonPhone'. Scan count 14170, logical reads 28446, physical reads 15, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Person'. Scan count 1, logical reads 2844, physical reads 3, …
Run Code Online (Sandbox Code Playgroud)

sql-server indexing query-hints

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

存储过程和OPTIMIZE FOR UNKNOWN

我已经阅读了SQL Server 2008 OPTIMIZE FOR UNKNOWN查询提示.我明白它是如何工作的.

不过,我有个问题在那里,并使用它.它不能在UDF中指定.它可以在存储过程中指定.但是,这篇 MSDN博客文章陈述如下:

4.将查询移入存储过程可以将其置于单独的过程上下文中,并且可以是优化器可以看到该值的好方法(注意:这也适用于SQL 2000)

在我看来,传递给存储过程的任何参数都将被"嗅探",从而帮助SQL Server编译最佳执行计划.这意味着将重新访问/重新编译缓存的计划(不确定该机制).然而,这是令人困惑的,因为它否定了OPTIMIZE FOR UNKNOWN的全部需求.

关于查询提示的MSDN文章没有涵盖我的问题.

有人可以为我解答这个问题,理想情况下是指向微软的一些东西来解决这个问题.谢谢.

sql-server stored-procedures query-hints optimizer-hints

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

为什么SQL会忽略索引提示并选择其他索引?

给定一个表上有两个索引,一个表从另一个表中反向排序并给出这两个查询.

Select value From SomeTable wITH (INDEX(IV_Sort_Asc))
Select value From SomeTable wITH (INDEX(IV_Sort_Desc))
Run Code Online (Sandbox Code Playgroud)

我在SQL Server 2008中遇到了一个忽略提示的案例,在这两种情况下IV_Sort_Desc都使用索引而不是第一个.

我意识到很多人会立即建议不提供提示,但鉴于我的具体情况,这不是一个选择.

什么会导致这种情况,我该怎么做才能解决它?当然你会期望SQL Server尊重索引提示而不是使用不同的索引提示?

sql indexing query-optimization query-hints sql-server-2008

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

SearchView没有显示queryHint文本

我有一个背景可绘制的搜索视图,但无论我尝试什么,我似乎都无法显示文本.SearchView中没有文字显示.

我已经尝试过android:text,android:queryHint甚至以编程方式设置它,mSearchView.setQueryHintText("search for something");但这些都没有.searchView不在actionBar中.

这是searchview的xml

<android.support.v7.widget.SearchView
        android:id="@+id/m_search_view"
        android:layout_width="match_parent"
        android:layout_height="@dimen/searchbar_height"
        android:layout_alignWithParentIfMissing="true"
        android:layout_toLeftOf="@+id/other_button"
        android:background="@drawable/rounded_corner_box"
        android:focusableInTouchMode="true"
        android:gravity="center_vertical|left"
        android:paddingLeft="@dimen/left_padding"
        android:queryHint="search for something"
        android:textAppearance="@style/m_text_appearance"
        android:textColor="@color/m_text_color" />
Run Code Online (Sandbox Code Playgroud)

当我没有设置背景时,我根本看不到searchView(searchView是半透明的).

任何帮助,将不胜感激.

android query-hints searchview android-studio

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

SQL Server:在语句完成之前,最大递归100已用尽

我有一个查询返回错误超过最大递归级别.

我知道如何通过添加OPTION (maxrecursion 0)到查询来解决这个问题,但我已经尝试在查询中的各个位置添加它,我无法找到将其放在语法有效的位置.

任何人都可以给我任何关于在我的视图中需要插入查询提示的指针吗?

/****** Object:  View [dbo].[SiconCFMContractLinesDetailByDayView]    Script Date: 16/12/2016 12:02:35 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE VIEW [dbo].[SiconCFMContractLinesDetailByDayView]
AS
WITH dateRange as
(
SELECT      [Date] = DATEADD(dd, 1, DATEADD(dd, -1,[SiconCFMContractLinesOutstandingView].[NextDueDate])),
[Frequency] = [SiconCFMContractLinesOutstandingView].[FrequencyValue],
[EndDate] = DATEADD(yy,5, [SiconCFMContractLinesOutstandingView].[NextDueDate]),
[SiconCFMContractLinesOutstandingView].[SiconContractLineID]
FROM        [SiconCFMContractLinesOutstandingView]
WHERE       DATEADD(mm, [SiconCFMContractLinesOutstandingView].[FrequencyValue], [SiconCFMContractLinesOutstandingView].[NextDueDate]) < DATEADD(mm, [SiconCFMContractLinesOutstandingView].[FrequencyValue], DATEADD(yy,5, [SiconCFMContractLinesOutstandingView].[NextDueDate]))
UNION ALL
SELECT      DATEADD(mm, [Frequency], [Date]) [Date],
[Frequency],
[EndDate],
[SiconContractLineID]
FROM        dateRange
WHERE       DATEADD(mm, [Frequency], [Date]) < DATEADD(mm, [Frequency],[EndDate])

)

SELECT
( …
Run Code Online (Sandbox Code Playgroud)

sql sql-server query-hints

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

什么时候在 SQL Server 中释放 UPDLOCK?

最近我研究了 SQL 服务器中的提示和锁。虽然谷歌关于这个话题,我读过一个博客,其中写了一些我不太理解的查询。这里是

BOL 状态:在读取表时使用更新锁而不是共享锁,并保持锁直到语句或事务结束。我在翻译这个时遇到了一些麻烦。这是否意味着在执行 SELECT 语句后会释放更新锁,除非 SELECT 语句在事务内?

换句话说,我在以下两种情况下的假设是否正确?

场景一:没有交易

SELECT something FROM table WITH (UPDLOCK)

/* update locks released */
Run Code Online (Sandbox Code Playgroud)

场景二:有交易

BEGIN TRANSACTION 
SELECT something FROM table WITH (UPDLOCK)

/* some code, including an UPDATE */
COMMIT TRANSACTION

/* update locks released */
Run Code Online (Sandbox Code Playgroud)

场景 2 的示例(参考 stackoverflow 博客)

BEGIN TRAN

SELECT Id FROM Table1 WITH (UPDLOCK)
WHERE AlertDate IS NULL;

UPDATE Table1 SET AlertDate = getutcdate() 
WHERE AlertDate IS NULL;

COMMIT TRAN 
Run Code Online (Sandbox Code Playgroud)

请帮助理解上述查询。

我的第二个问题是:一旦同时完成 select 语句的执行,是否UPDLOCK被释放?

sql-server locking transactions database-administration query-hints

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

使用提示优化 Oracle 查询

我有一个复杂的 Oracle 查询。

SELECT
    r3.object_id
FROM
    nc_references r
    INNER JOIN nc_objects     o ON r.object_id = o.object_id
                               AND o.object_class_id = 90000330 /* Work Item */
    INNER JOIN nc_params      p ON p.object_id = o.object_id
                              AND p.attr_id = 90100070 /* State */  AND p.list_value_id IN ( 90100071 /* Ready */, 90100072 /* Active */ )
    INNER JOIN nc_po_actions  poa ON poa.manual_task_id = o.object_id
    INNER JOIN nc_po_tasks    pot ON pot.task_id = poa.task_id
    INNER JOIN nc_references  r1 ON r1.object_id = pot.container_id
                                   AND r1.attr_id = 9145923960313063683 …
Run Code Online (Sandbox Code Playgroud)

sql oracle query-hints oracle11g

-1
推荐指数
1
解决办法
862
查看次数