簡體   English   中英

如何優化此MYSQL查詢以使其運行更快

[英]how to optimise this MYSQL query to run faster

我有兩張桌子

requests - request_id, request_message, user_id
responses - response_id, request_id, response_message, user_id, status

我正在運行此查詢來獲取未讀響應的計數,該計數屬於特定用戶。

SELECT COUNT(*) 
FROM RESPONSES 
WHERE status = 'U' 
and request_id IN ( SELECT request_id FROM requests WHERE user_id  = '$User_id')

有什么方法可以使用join優化它嗎?

聯接優於子查詢試試看

SELECT COUNT(*) 
FROM responses r
INNER JOIN requests rrs ON rrs.request_id = r.request_id
WHERE r.status = 'U' 
and r.user_id = '$User_id')

我建議使用顯式聯接而不是子查詢:

SELECT 
 count(*) 
FROM
  responses res
INNER JOIN
  requests req
ON
  req.request_id=res.request_id
WHERE 
  req.user_id='$User_id'
  and res.status='U';

request_id字段被索引了嗎? 我猜它是請求中的PKEY。 請求中的user_id字段呢?

另外,在復制語法時,我希望$ User_id不是由用戶生成的輸入填充的變量。 您應該使用綁定參數(方法將取決於您使用的語言。)

另一個查詢是這個...

SELECT COUNT(*)
FROM responses
    INNER JOIN requests ON
        (requests.request_id = responses.request_id)
WHERE status = 'U' AND 
      responses.user_id = '$User_id'

內部聯接的最大運行時間為max(table_1,table_2),對於嵌套查詢,多項式可能取決於查詢,所以是的,這是更快的...

有幾種方法可以加快sql速度
1)始終使用固定的行寬度,即始終不使用字符串varchar
2)良好的索引編制。
3)盡可能緩存。
緩存可以在服務器(代碼)上完成...或設置輔助只讀數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM