2 回答

TA貢獻1744條經(jīng)驗 獲得超4個贊
每個工具都有自己的定位,以及特定的使用場景。如果不在其擅長的場景下使用很可能你會遇上很多的痛苦。下面嘗試通過描述下mysql函數(shù)的使用場景來回答題主的問題。
先看看mysql的一些個性:
1:單表千萬級別(優(yōu)化到極致能達到億級別)行記錄存儲,簡單條件(最好條件上有索引,當然也需要看具體case)查詢
2:mysql喜歡大內(nèi)存(可以將大量的索引直接放到內(nèi)存中),喜歡高性能IO(比如SSD)
3:高并發(fā)的時候,CPU資源消耗也是非常嚴重的。如果峰值請求的時候,給遇上一個mysql函數(shù)(需要CPU做計算),那就很可能因為一個簡單mysql函數(shù)釀成了悲劇。mysql出事故的時候,load很容易飆到100+
下面再看我們系統(tǒng)的場景
1:mysql不是系統(tǒng)的瓶頸
該場景下可以隨意的使用mysql提供的特性功能,例如msyql函數(shù),多方便好用啊。較少了應(yīng)用層的工作量。而且對你系統(tǒng)性能沒有多大的影響。
舉例說明:小型系統(tǒng),請求量小,數(shù)據(jù)存儲量小,mysql server內(nèi)存充足,統(tǒng)計需求(一個sql跑一個晚上你也不擔心)
2:mysql即將(或者正在)是系統(tǒng)的瓶頸
這個時候mysql最好僅僅當做存儲來用,盡量不做任何額外的計算。優(yōu)化的時候,會盡可能的把計算消耗的資源移到應(yīng)用層去做。盡量保證mysql僅僅做儲存工作。另外使用mysql函數(shù)很可能走不了索引,那個更悲劇了,這樣系統(tǒng)更沒辦法抗住大并發(fā)。

TA貢獻1824條經(jīng)驗 獲得超6個贊
用mysql自帶函數(shù)有什么不好?
1.很可能造成where后的條件無法走索引
2.把一些php層面簡單的業(yè)務(wù)邏輯交給mysql來做,加大了mysql的壓力(盡管可能你看來執(zhí)行一次sql語句影響很小),對小系統(tǒng)而言沒什么。如果對于大型系統(tǒng),那會是災(zāi)難。大型系統(tǒng)的瓶頸基本都在數(shù)據(jù)庫層面難以擴展,php很容易的水平擴展,php不會是瓶頸,因此,盡可能的降低數(shù)據(jù)庫的處理壓力,包括減少查詢次數(shù)通過cache來解決,減少每次查詢的時間則通過索引以及盡可能的業(yè)務(wù)在php層面處理,mysql只做最基本簡單的查詢少使用自帶函數(shù)。
那mysql自帶函數(shù)為什么存在?
1. 比如一些數(shù)據(jù)初始化是可以用,或者存儲過程等..
2. 小型系統(tǒng)可以使用mysql自帶函數(shù),反正沒啥瓶頸
3. 不能因為大型系統(tǒng)不建議查詢用自帶函數(shù)就不提供,因為考慮到普遍的需求
比如php框架的ORM設(shè)計,很費資源又慢,大型系統(tǒng)也不建議用,小系統(tǒng)就隨便用,方便又快速。
總結(jié)就是不能因為一些場景不建議用就不提供...方便快速的代價就是性能。
以上純屬個人觀點...
添加回答
舉報