django的ORM性能思考

由自定義分頁組件引起的思考,最終的結果是我考慮得到的東西,django早八百年想到了

源於分頁組件的一句切片操作,我就想,每點一次下一頁它都在數據庫裏面查詢全部數據再切片給你,那性能豈不是尿崩。是我太天真了!

userlist = models.fenye.objects.all()[pageinfo.start():pageinfo.end()]

人家django是什麼?大而全的框架,要你替它乾着急?笑話。對於一般人而言,它已經做了足夠的性能調優,放心用就好了。

QuerySet特點總結

  • 可切片
    使用Python 的切片語法來限制查詢集記錄的數目 。它等同於SQL 的LIMIT 和OFFSET 子句。
  • 可迭代
  • 惰性查詢
    創建查詢集不會帶來任何數據庫的訪問,直到查詢集 需要求值時,Django 纔會真正運行這個查詢。
  • 緩存機制
    每個查詢集都包含一個緩存來最小化對數據庫的訪問。理解它是如何工作的將讓你編寫最高效的代碼。
    當queryset非常巨大時,cache會成爲問題。
  • 其他
    再就是一些方法的區別,比如有些方法能讓訪問數據庫的次數減少。
    可能我知道的也不全所以不在這兒列舉。
    最關鍵的就是知識體系要儘可能完整,根據需求選取合適的ORM操作達到性能最佳。
  • queryset API
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章