簡體   English   中英

Mysql 慢查詢僅在腳本中,而不是在 phpmyadmin 中。 如何解決?

[英]Mysql slow-query only in script, but not in phpmyadmin. How to solve that?

我有一個沒有任何連接的簡單 select 語句。 它所做的只是檢查 date_time 和其他一些標志

表有大約 45.000 個條目。 該查詢每 5 分鍾在 php 腳本中執行一次,以發送電子郵件(如果找到條目或沒有條目,它將發送 1 封電子郵件)

我一直在為這個查詢添加一個索引,當我使用 EXPLAIN 時,使用了索引。 所以我能夠使這個查詢非常快(0.0006 秒)。 但它沒有幫助。

select  *
    from  tablex
    where  bz <> 'vok'
      and  date_checkout < DATE_ADD(sysdate(),INTERVAL -15 MINUTE)
      and  date_checkout > '0000-00-00 00:00:00'
      and  bx=0
      and  bz <> ''
      and  nsem=0
      and  email <> 'info@xxx.com' 

這個查詢填滿了我的慢查詢日志(我將它設置為 0.4 秒) 在 php 腳本中,查詢需要大約 0.7 秒。

當我復制查詢並在 phpmyadmin 上使用它時,它需要 0.0006 秒。

為什么這個查詢在 php 腳本和 phpmyadmin 控制台中存在差異?

綜合指數可能有助於:

INDEX(bx, nsem,        -- first, in either order
      date_checkout)   -- last

如需進一步討論,請提供SHOW CREATE TABLE

如果您不需要所有列,請僅拼出您需要的列。

是否有理由使用SYSDATE()而不是NOW()

0.0006聞起來像是使用了查詢緩存。

如果找到條目或沒有條目,它會發送 1 封電子郵件

然后加入LIMIT 1

盡量避免需要這么多標志(零date_checkout 、 nsem=0、 bx=0 等)

每 300 秒 0.7s 真的微不足道。

所以我現在學到的是,phpmyadmin 中顯示的查詢時間並不反映 php 腳本中的真實查詢時間。 (也是當我使用 SQL_NO_CACHE 時)

我對時差(0.7 對 0.0006 秒)沒有任何解釋。

我沒有更改我的 SQL 語句,但是我將所有 2 天之前的條目的表標志 nsem 更新為 -1,所以現在 SQL 只是使用 nsem 作為查詢的索引(而不是大索引)。 nsem 是在發送電子郵件時設置為 1 的標志,否則設置為 0(並非所有條目都需要發送電子郵件......他們現在得到了 -1)。 現在查詢速度很快。

暫無
暫無

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

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