[英]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.