2 回答

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

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