還記得以前第一次自己架設LAMP開發環境的時候,就已經注意到安裝有這兩個package了
但那時候還不曉得有何差別,只記得書上叫我裝php5-mysql就照著裝XD
前陣子碰到一個需要安裝mysqlnd才能解決的問題,正好趁這個機會來瞭解一下差別
MySQL Native Driver is a replacement for the MySQL Client Library (libmysqlclient)
在PHP文件的myslqnd章節內一開頭就說明了mysqlnd是用來取代libmysqlclient
為何PHP官方會建議使用mysqlnd?
mysqlnd是屬於PHP Project的一部份
不像libmysqlclient是使用MySQL license,mysqlnd是使用PHP license這也避免了一些因為license所衍生的問題(看看前陣子Oracle告Google的新聞就知道為什麼了!)
mysqlnd的功能比libmysqlclient還多
從PHP 5.3.0開始mysqlnd library 已經是內建在PHP的library,mysqlnd提供的一些功能像是query caching、lazy connections、SSL這些在libmysqlclient的沒辦法用的
詳細差異請參閱Library feature comparison
mysqlnd的效能比libmysqlclient還好
由於mysqlnd是用C寫的PHP extension,所以它是使用PHP memory management system也支援PHP memory limit和memory_get_usage(),安裝mysqlnd可以使用memory_get_usage()來追蹤記憶體的使用情形,而是在libmysqlclient是不可能的,因為libmysqlclient要使用C語言的function malloc(),在官網有舉一個例子:
One example of the memory efficiency is the fact that when using the MySQL Client Library, each row is stored in memory twice, whereas with the MySQL Native Driver each row is only stored once in memory.
libmysqlclient在儲存每一筆資料row到memory的時候會存兩次
而mysqlnd只會存一次
參考來源:
http://php.net/manual/en/mysqlnd.overview.php
http://php.net/manual/en/mysqlinfo.library.choosing.php