2014-09-04 75 views
0

我只是試圖在幾乎有100萬條記錄的db表中運行簡單的查詢。問題是執行簡單查詢需要花費數小時的時間。請檢查下面的查詢。簡單的MySQL查詢調整100萬條記錄

Select * from users where (status='active' or status='pending') and 
usertype='buyer' 

我試圖創建所有可能的方式列狀態和usertype索引,但我沒有看到任何結果。

我正在使用InnoDB數據庫。我只想要一些調整技巧,我可以在幾秒鐘內得到結果。

謝謝。

+0

多少條記錄,你要顯示 – rohitr 2014-09-04 11:56:49

+0

多少行這會返回嗎?你嘗試了什麼索引(一個關於usertype,狀態應該有所幫助)?你可以展示一個查詢計劃嗎? – Thilo 2014-09-04 11:56:53

+1

即使沒有索引,在一百萬行的單個表上這樣的簡單查詢也不應該花費「小時」。你誇大了嗎?或者有可能'用戶'真的是一個視圖或有很長的文本/ blob列? – 2014-09-04 12:00:00

回答

0

首先,編寫查詢這樣的:

Select * 
from users 
where status in ('active', 'pending') and usertype = 'buyer'; 

in只是更容易比和一幫or s到閱讀。

接下來,創建以下指標:

create index users_usertype_status on users(usertype, status); 
+0

我按照你的建議完成了,但沒有發現任何區別。 – 2014-09-04 12:38:05

+0

@ user3264996。 。 。將'select *'替換爲'select count(*)'。如果這個運行速度很快,那麼可能的罪魁禍首就是您連接到服務器。 – 2014-09-04 14:22:13

0

好吧....

你有三個級別調整的。

物理調整: 購買更多磁盤。

物理層調整: 創建索引,如 在用戶(狀態)上創建索引idx_users_status; 在用戶(用戶類型)上創建索引idx_users_usertype;

而且你們都可以這麼做,並且將意見作爲次要結果。

create v_buyers as Select * from users where usertype='buyer'; 
select * from v_buyers where status in ('active', 'pending'); 

這可以提供多核心機器上的調整效果。

+0

謝謝丹尼斯。我正在使用AWS db.m3.large RDS實例。正如你可能知道的那樣,它是很好的配置。 我已經創建了索引所有可能的方式,但沒有運氣。 我不相信視圖對我有用,因爲它需要花費數小時來創建/更新視圖。 另外下面的查詢也需要幾小時的時間來執行。 從('active','pending'); – 2014-09-04 12:33:25

0

好吧,如果你的數據是時間範圍,你可以使用範圍分區

CREATE TABLE employees (
id INT NOT NULL, 
fname VARCHAR(30), 
lname VARCHAR(30), 
hired DATE NOT NULL DEFAULT '1970-01-01', 
separated DATE NOT NULL DEFAULT '9999-12-31', 
job_code INT NOT NULL, 
store_id INT NOT NULL 
) 
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6), 
PARTITION p1 VALUES LESS THAN (11), 
PARTITION p2 VALUES LESS THAN (16), 
PARTITION p3 VALUES LESS THAN (21) 
); 

或列表 - 分區了「買家」

CREATE TABLE employees (
id INT NOT NULL, 
fname VARCHAR(30), 
lname VARCHAR(30), 
hired DATE NOT NULL DEFAULT '1970-01-01', 
separated DATE NOT NULL DEFAULT '9999-12-31', 
job_code INT, 
store_id INT 
) 
PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (3,5,6,9,17), 
PARTITION pEast VALUES IN (1,2,10,11,19,20), 
PARTITION pWest VALUES IN (4,12,13,14,18), 
PARTITION pCentral VALUES IN (7,8,15,16) 
); 
相關問題