我剛剛弄清楚爲什麼從我的PHP前端運行的查詢比從MySQL監視器運行它的時間要長大約50秒,但想要更好地理解這些影響。我使用兩個變量,$擴展和$今天並通過參數化將它們發送到mysql。當我選擇$擴展作爲整數時,它需要很長時間。當我把它稱爲一個字符串時,它非常即時。瞭解參數化查詢中我和s之間的含義
查詢;
$stmt = $db_conn->prepare(
"select from_unixtime(dateTimeOrigination) as date_of_call_origination ,
callingPartyNumber as calling_party_number,
originalcalledpartynumber as original_called_party_number,
finalCalledPartyNumber as final_called_party_number,
SEC_TO_TIME(duration) as duration,
origDeviceName, destDeviceName
from cdr_records
where (callingPartyNumber= ? or originalcalledpartynumber= ? or finalcalledpartynumber = ?)
and
from_unixtime(dateTimeOrigination) between ? and ADDDATE(?, INTERVAL 1 DAY) order by datetimeorigination desc");
我的綁定語句;
原始
$stmt->bind_param('iiiss', $extension, $extension, $extension, $today, $today);
改爲
$stmt->bind_param('sssss', $extension, $extension, $extension, $today, $today);
所以,我有兩個問題;
1 - $擴展在技術上是一個字符串,但它總是由數字組成。將它稱爲整數不是更好嗎?它可以是5到15個字符之間的任何長度。
2 - 通過引用它作爲一個字符串,它是否有可能讓自己面臨任何安全問題?
他們看來是電話號碼應該始終爲了保持前導零並避免需要一個足夠大的數字類型的字符串。 –
你應該匹配類型;如果該列是一個字符串,則在where子句中使用一個字符串,如果它們是不同的類型需要進行類型轉換,則這將會變慢可能會影響索引的使用。 –
嗨,亞歷克斯 - 所以,如果列類型是varchar,我應該聲明它爲'我'? – Kimomaru