2012-08-13 45 views
0

當我用一樣,訪問停留當我使用「喜歡」運算符時,Access數據庫掛起?

SELECT ox.*, '+++++++++++' AS judo, sh2.* 
FROM OXUS AS ox INNER JOIN Sheet2 AS sh2 ON sh2.ID_P LIKE "*" & ox.ID_P; 

如果我使用

SELECT ox.*, '+++++++++++' AS judo, sh2.* 
FROM OXUS AS ox INNER JOIN Sheet2 AS sh2 ON sh2.ID_P=ox.ID_P; 

立即打開。

+0

使用通配符作爲第一部分的性能問題,如:http://stackoverflow.com/a/20538/1370425:實質上,它必須做一個完整的搜索沒有索引的好處 – SeanC 2012-08-13 21:17:33

回答

0

第一條語句是基於匹配id的表之間的直接連接。我懷疑這也是一個索引。 第二種說法是基於使用通配符來檢查每個和任何(!)連接到ID上的表。它也可以從int轉換爲varchar,具體取決於類型....全部不使用索引。

Like語句總是成本更高,因爲他們必須單獨檢查列內容以進行特定的匹配。不建議將它們用作連接的一部分。

我認爲這是減少真正的問題,因爲類似的聲明是沒有意義的。

你想達到什麼目的?

+0

ID-P - 是數字的護照(Varchar)。 我想通過護照 – Fara 2012-08-13 05:42:05

+0

查找2張表中的相同客戶請注意,在字符串末尾使用通配符將使用索引 – SeanC 2012-08-13 21:19:16

+0

親愛的,我無法解決這個問題,與t-sql相同的問題,但我在t-sql中使用函數。謝謝你。 – Fara 2012-08-14 06:15:39

1

在這種情況下,你可以使用一個隱含的加入,這就是:

SELECT DISTINCT ox.P_ID, '+++++++++++' AS judo, sh2.P_ID 
FROM OXUS AS ox, Sheet2 AS sh2 
WHERE Instr(sh2.P_ID, ox.P_ID)>0 

然而,這只是用於查找行是有用的。

+0

「Instr」爲我工作。但是查詢確實有點慢。 – 2012-10-25 19:59:54