自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP與MySQL數(shù)據(jù)庫中排序的對比及使用條件詳解

數(shù)據(jù)庫 MySQL
本文我們主要介紹了PHP與MySQL數(shù)據(jù)庫中排序的相關(guān)知識的介紹,以及一些必須在PHP或者是MySQL數(shù)據(jù)庫中進(jìn)行排序的實例的介紹,希望能夠?qū)δ兴鶐椭?/div>

PHPMySQL數(shù)據(jù)庫中排序的對比及使用條件是本文我們主要要介紹的內(nèi)容,通常來說,執(zhí)行效率需要考慮CPU、內(nèi)存和硬盤等的負(fù)載情況,假定MySQL服務(wù)器和PHP服務(wù)器都已經(jīng)按照最適合的方式來配置,那么系統(tǒng)的可伸縮性(Scalability)和用戶感知性能(User-perceived Performance)是我們追求的主要目標(biāo)。在實際運行中,MYSQL 中數(shù)據(jù)往往以 HASH tables、BTREE 等方式存貯于內(nèi)存,操作速度很快;同時INDEX 已經(jīng)進(jìn)行了一些預(yù)排序;很多應(yīng)用中,MySQL 排序是***。

PHP與MySQL相比具有如下優(yōu)勢:

1、考慮整個網(wǎng)站的可伸縮性和整體性能,在應(yīng)用層(PHP)中排序明顯會降低數(shù)據(jù)庫的負(fù)載,從而提升整個網(wǎng)站的擴展能力。而數(shù)據(jù)庫的排序,實際上成本是非常高的,消耗內(nèi)存、CPU,如果并發(fā)的排序很多,DB 很容易到瓶頸。

2、如果在應(yīng)用層(PHP)和MYSQL之間還存在數(shù)據(jù)中間層,合理利用,PHP會有更好的收益。

3、PHP在內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)專門針對具體應(yīng)用來設(shè)計,比數(shù)據(jù)庫更為簡潔、高效;

4、PHP不用考慮數(shù)據(jù)災(zāi)難恢復(fù)問題,可以減少這部分的操作損耗;

5、PHP不存在表的鎖定問題;

6、MySQL中排序,請求和結(jié)果返回還需要通過網(wǎng)絡(luò)連接來進(jìn)行,而PHP中排序之后就可以直接返回了,減少了網(wǎng)絡(luò)IO。

至于執(zhí)行速度,差異應(yīng)該不會很大,除非應(yīng)用設(shè)計有問題,造成大量不必要的網(wǎng)絡(luò)IO。另外,應(yīng)用層要注意PHP 的 Cache 設(shè)置,如果超出會報告內(nèi)部錯誤;此時要根據(jù)應(yīng)用做好評估,或者調(diào)整Cache。具體選擇,將取決于具體的應(yīng)用。

列出一些PHP中執(zhí)行排序更優(yōu)的情況:

1、數(shù)據(jù)源不在MySQL 中,存在硬盤、內(nèi)存或者來自網(wǎng)絡(luò)的請求等;

2、數(shù)據(jù)存在 MySQL 中,量不大,而且沒有相應(yīng)的索引,此時把數(shù)據(jù)取出來用PHP排序更快;

3、數(shù)據(jù)源來自于多個MySQL 服務(wù)器,此時從多個 MySQL 中取出數(shù)據(jù),然后在PHP中排序更快;

4、除了MySQL 之外,存在其他數(shù)據(jù)源,比如硬盤、內(nèi)存或者來自網(wǎng)絡(luò)的請求等,此時不適合把這些數(shù)據(jù)存入MySQL 后再排序;

列出一些必須在MySQL中排序的實例:

1、MySQL中已經(jīng)存在這個排序的索引;

2、MySQL中數(shù)據(jù)量較大,而結(jié)果集需要其中很小的一個子集;比如 1000000 行數(shù)據(jù),取***0;

3、對于一次排序、多次調(diào)用的情況,比如統(tǒng)計聚合的情形,可以提供給不同的服務(wù)使用,那么在MySQL 中排序是***的。另外,對于數(shù)據(jù)深度挖掘,通常做法是在應(yīng)用層做完排序等復(fù)雜操作,把結(jié)果存入MySQL即可,便于多次使用。

4、不論數(shù)據(jù)源來自哪里,當(dāng)數(shù)據(jù)量大到一定的規(guī)模后,由于占用內(nèi)存/Cache 的關(guān)系,不再適合PHP中排序了;此時把數(shù)據(jù)復(fù)制、導(dǎo)入或者存在MySQL ,并用INDEX 優(yōu)化,是優(yōu)于PHP 的。不過,用 Java,甚至 C++ 來處理這類操作會更好。 有些類似大數(shù)據(jù)集聚合或者匯總的數(shù)據(jù),在客戶端排序得不償失。當(dāng)然,也有用類似搜索引擎的思路來解決類似應(yīng)用的情況。

從網(wǎng)站整體考慮,就必須加入人力和成本的考慮。假如網(wǎng)站規(guī)模和負(fù)載較小,而人力有限(人數(shù)和能力都可能有限),此時在應(yīng)用層(PHP)做排序要做不少開發(fā)和調(diào)試工作,耗費時間,得不償失;不如在DB 中處理,簡單快速。對于大規(guī)模的網(wǎng)站,電力、服務(wù)器的費用很高,在系統(tǒng)架構(gòu)上精打細(xì)算,可以節(jié)約大量的費用,是公司持續(xù)發(fā)展之必要;此時如果能在應(yīng)用層(PHP) 進(jìn)行排序并滿足業(yè)務(wù)需求,盡量在應(yīng)用層進(jìn)行。

關(guān)于PHP中執(zhí)行排序與MySQL中執(zhí)行排序的相關(guān)知識就介紹到這里了,希望本次的介紹能夠?qū)δ兴斋@!

【編輯推薦】

  1. MySQL數(shù)據(jù)庫mysqlcheck的使用方法詳解
  2. Linux cron執(zhí)行MySQL失敗的問題解決方案
  3. MySQL數(shù)據(jù)庫TIMESTAMP設(shè)置默認(rèn)值的靈活運用
  4. MySQL性能優(yōu)化之使用Limit關(guān)鍵字來避免全表掃描
  5. MySQL數(shù)據(jù)庫TIMESTAMP設(shè)置默認(rèn)值的幾個應(yīng)用實例
責(zé)任編輯:趙鵬 來源: CSDN博客
相關(guān)推薦

2010-06-04 10:40:55

AJAX MySQL

2010-06-01 10:47:21

連接MySQL數(shù)據(jù)庫

2011-08-25 17:49:14

MySQLmysqlcheck

2009-09-07 15:25:24

MySQL數(shù)據(jù)庫互操作Silverlight

2021-04-27 07:42:35

數(shù)據(jù)庫MySQLSQLServer

2011-09-01 15:10:22

Qt數(shù)據(jù)庫SQL

2011-08-05 10:01:47

MySQL庫Pdo-MysqlMysqli

2010-07-01 11:03:04

SQL Server轉(zhuǎn)

2009-09-03 11:42:32

2009-07-28 14:16:31

ASP.NET與MyS

2019-12-18 08:00:09

MySQL數(shù)據(jù)庫ORDER BY

2011-08-24 15:36:30

2010-05-27 10:10:00

連接MySQL數(shù)據(jù)庫

2024-11-19 13:11:19

2010-05-28 10:34:39

連接MySQL數(shù)據(jù)庫

2022-03-29 10:52:08

MySQL數(shù)據(jù)庫

2010-04-01 09:45:38

NoSQL

2010-04-02 17:11:45

Oracle數(shù)據(jù)庫

2011-07-26 13:55:01

MongoDB備份與恢復(fù)

2024-09-10 08:00:00

PostgreSQL數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號