我想用全文搜索调整我的查询。使用全文搜索调整简单查询
我有两个表:
artaolInventTable
一个)IT_NAMEIDIDX(唯一的,非群集)
- 的itemId
- ITEMNAME (包括柱
B)IT_IMPORTIDX(非唯一的,非群集)
- importIndex
C)IT_ITEMNAMEIDX(唯一的,群集)
- ITEMNAME
d) PK_ARTAOLINVENTTABLE(唯一,非群集)
- 的itemId
InventSumIntegration_ART
一个)IS_AVAILIDX(非唯一的,非聚集)
- availphysical
B)IS_ITEMIDX(唯一的聚簇)
- 的itemId
- availphysical
首先我简单查询:
查询1
SELECT
it.ItemId, it.ItemName, it.ItemBrand, it.Amount, it.salesunit, it.importIndex
FROM
artaolInventTable IT
WHERE
(CONTAINS(it.ItemName, '("Papier*" OR FORMSOF(THESAURUS, Papier)) AND ("ksero*" OR FORMSOF(THESAURUS, ksero)) AND ("A4*" OR FORMSOF(THESAURUS, A4))')
OR it.importIndex = 'IP000' OR it.ItemId = 'aaaa')
ORDER BY
it.ItemName
CPU时间= 32毫秒,经过时间= 205毫秒。
执行计划看起来不错。在where子句中查找SQL Server使用索引的每个条件。
我加了第二张表,我的执行时间增加到了51秒!为什么?我的索引有问题吗?我应该如何构建它?
INVENTSUMSHOPINTEGRATION
发明了股票价值。
查询2
SELECT
IT.ITEMID, IT.ITEMNAME, IT.ITEMBRAND, IT.AMOUNT, IT.SALESUNIT, IT.ImportIndex,
ISU.AVAILPHYSICAL
FROM
ARTAOLINVENTTABLE IT
JOIN
INVENTSUMSHOPINTEGRATION_ART ISU ON ISU.ITEMID = IT.ITEMID
WHERE
(CONTAINS(IT.ITEMNAME, '("Papier*" OR FORMSOF(THESAURUS, Papier)) AND ("ksero*" OR FORMSOF(THESAURUS, ksero)) AND ("A4*" OR FORMSOF(THESAURUS, A4))')
OR IT.IMPORTINDEX = 'IP000' OR IT.ITEMID = 'aaaa') AND (ISU.AVAILPHYSICAL >= 0)
ORDER BY
it.ITEMNAME
CPU时间= 51418毫秒,经过时间= 51756毫秒。
我忘了写我使用MS SQL 2008R2。全文搜索是SQL SERVER引擎的一部分。 我必须使用.net 2.0,所以我有问题使用lastes库。 – Lutador
我对MS-World不熟悉。但以我的经验来看,联盟的或者糟糕的索引是性能杀手。有时临时表可以提高你的表现。尝试将第一个查询放在临时表中,然后使用INVENTSUMSHOPINTEGRATION_ART进行过滤。 –