2012-04-26 65 views
2

我創建了一個表上有許多選擇與SQL:如何優化單表

CREATE TABLE xy (
blub VARCHAR(50) NOT NULL, 
z INT UNSIGNED NOT NULL, 
PRIMARY KEY (blub) 
) 

,並希望通過列「咕嚕咕嚕」查詢一次許多條目。目前我使用的是簡單的查詢

SELECT blub, z FROM xy WHERE blub = '...' 

SELECT blub, z FROM xy WHERE blub = '...' OR blub = '...' OR '... 

快得多是否有任何其他的方式來使其更快,合併所有查詢?

+1

這個問題回答了這個非常好。 http://stackoverflow.com/questions/3510395/sql-server-in-or-or-which-is-fastest – Gats 2012-04-26 21:27:08

回答

2

您可以嘗試in子句。我不確定它會更快,但它肯定會更簡潔。例如:

select blub, z from zy where blub in ('this', 'that', 'theother'); 

explain會告訴你哪種情況實際上是最快的。

2
SELECT blub, z FROM xy WHERE blub in ('a','b','c') 
1

使用的IN子句中的WHERE這樣的:

SELECT blub, z 
FROM xy 
WHERE blub IN ('value1', 'value2', 'value3') 

至於哪一個更好的運行/更快您可以使用查詢執行計劃的查詢。在Sql-server中,單擊「包括實際執行計劃」。在MySql中,你可以使用EXPLAIN函數。

1

您需要添加一個索引

CREATE TABLE xy ( 
blub VARCHAR(50) NOT NULL, 
z INT UNSIGNED NOT NULL, 
PRIMARY KEY (xy), 
KEY (blub,z) 
) 

如果您的表已填充,然後做這個

ALTER TABLE xy ADD INDEX (blub,z); 

然後,SELECT blub, z FROM xy WHERE blub in ('a','b','c')會更快