2013-05-10 21 views
0

我在我的數據庫中有一個表,它有300684條記錄,問題是當我執行一個SQL查詢時,響應需要很長時間,所以有提高迴應時間?我在phpmyadmin工作,我不喜歡使用另一個SGBD。謝謝在一個大的MySQL數據庫中的sql查詢的響應速度

,這是我的查詢:

SELECT * FROM `gipeord_conjoint` WHERE COD_AG in (select PPR from 
gestion_delegation.dataidentifpersonnel) 

兩個表gipeord_conjointdataidentifpersonnel是在兩個不同的數據庫,這是第一個gipeord_conjoint的結構:

COD_AG int 
NUM_CONJ int 
SIT_CONJ varchar 
PRF_CONJ varcha 
NAT_CONJ varchar 
DOTI_CONJ int 
CIN_CONJ varchar 

,這是dataidentifpersonnel的結構:

PPR int 
CIN varchar 
CD_POSITION varchar 
CD_NATION varchar 
CD_DIPS varchar 
CD_DISCIP varchar 
CD_STATUT varchar 

... ...

+3

300K記錄對於數據庫來說不是很大...但是,有很多因素會導致這種情況(您是否在查詢中進行連接,構成列的數據類型,是否有適當的索引,是否使用LIKE%xxx%等),而沒有看到你的查詢和表結構,可以提供很多幫助。 – Tommy 2013-05-10 14:40:54

+3

好吧,你應該告訴我們更多關於你的表模式(字段,索引,...)並向我們顯示你的查詢。很難告訴你如何優化我們什麼都不知道的東西... – 2013-05-10 14:41:18

+1

什麼是查詢? – 2013-05-10 14:43:14

回答

2

決不...使用SELECT * ... EVER。


這就好比說:

大家好,我的電腦是比平時慢你能解釋一下爲什麼嗎?

如果您想從我們的部分獲得更具體的幫助,您需要向我們展示您的查詢。

至於你目前的情況,300,684記錄不是那麼多,所以它不是一個緩慢的查詢的理由。

把我的頭的頂部:

  • 你的查詢可以不優化。看看execution plan。 (我想看錶掃描)
  • 確保你有合適的索引。
  • 看看有多少人同時運行請求。
  • 檢查誰在查詢數據庫以及查詢來自哪裏。

添加您的查詢,我可以幫助更多。

+0

我的數據庫僅供我使用。編輯後,我在問題中添加了查詢。 – Somar 2013-05-10 14:54:56

0

MySQL 5.6更改where子句中的in的優化方法(如解釋here)。

如果您使用的是較早版本的MySQL,那麼它將爲輸出中的每一行執行in子查詢。您可以通過改變inexists條款解決這個問題:

select gc.* 
FROM `gipeord_conjoint` gc 
WHERE exists (select 1 from gestion_delegation.dataidentifpersonnel dip where dip.PPR = gc.COD_AG) 

這將是更快與gestion_delegation.dataidentifpersonnel(PPR)的索引。

+0

我明白了:)謝謝 – Somar 2013-05-10 15:59:50

相關問題