2016-05-12 159 views
1

我必須在mysql中使用和不使用索引運行相同的查詢。 我創建索引這樣的:在mysql中執行帶索引和不帶索引的查詢

create index index_1 on table_1(column_name); 
create index index_2 on table_2(column_name); 

我執行這一點,我得到的結果0行已受到影響,這兩個時間。這個可以嗎?

因爲當我執行我有(後我創建的索引)的查詢,它需要我的同時,之前

數據庫的視圖(無指標): click here for the image

我有多個有關此數據庫的小查詢,如

SELECT DISTINCT customers.customer_id, customers.customer_name 
FROM customers 
    INNER JOIN accounts ON customers.customer_id = accounts.customer_id 
    INNER JOIN transactions ON transactions.account_id = accounts.account_id 
WHERE transactions.trn_date >= '2011/05/01' 
    AND transactions.trn_date <= '2011/05/31' 
ORDER BY customers.customer_id 
+0

太少的信息。我們需要表定義,查詢等。 – jarlh

+1

而索引是? – jarlh

+0

我們必須自行決定在基表上創建2個索引以減少查詢的執行時間,並且仍然會有新數據加載時間的輕微增加 – Thodoris

回答

2

您需要這些指標對於查詢:

transactions: INDEX(trn_date) 
accounts:  INDEX(account_id) 
customers: INDEX(customer_id) 

在後兩種情況下,你可能已經有一個列作爲PRIMARY KEY。如果是這樣,請不要添加冗餘INDEX

1

我執行這一點,我得到的結果0行已受到影響,這兩個 ŧ輸入法。這個可以嗎?

是的,沒關係。
有DDL操作創建新的對象,不應該輸出的東西。

因爲當我執行我的查詢(我創建了索引之後),它 像以前那樣需要我在同一時間(沒有索引)

的查詢都沒有使用索引。內部優化器根據數據分佈做出決定。例如,如果column_name.table_1具有50個唯一值,則不會使用索引。

更多細節您可以同時官方文檔中找到:9.3.1 How MySQL Uses Indexes

+0

我們必須自行決定創建2個索引,在基表上以減少查詢的執行時間,並且仍然會有新數據加載時間的輕微增加@Pavel Zimogorov – Thodoris

+0

您應該計算用於改進select查詢和插入降級的索引的好處。如果你有密集的數據加載,我會建議創建單獨的表來檢索數據(TRN_SELECT)。並且僅將TRN用於插入數據並選擇填充TRN_SELECT的行 –