日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于程序中查询效率的问题

發布時間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于程序中查询效率的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于程序中查詢效率的問題
在程序編碼過程中會和很多的各種各樣的數據打交道,正確的操縱數據是每個程序員的必備功課,也是最根本的。但是如何快速高效的查詢出自己所需要的數據或者說符合條件的數據則顯得至關重要。下面就總結一下我在開發過程中所遇到的有關查詢效率的經驗。
首先說數據庫中數據查詢效率的問題。
1、建立索引
數據庫索引就像是書的目錄,能加快數據庫的查詢速度。
比如 下面這個查詢語句 select * from table where id=10
如果沒有索引,必須遍歷整個表,直到id等于10的這一行被找到為止;有了索引之后(必須是在id這一列上建立的索引),直接在索引里面找10(也就是在id這一列找),就可以得知這一行的位置,也就是找到了這一行。通常考慮在where及order by 設計的列上建立索引。可見,索引是用來定位和排序的。
但是索引也不能大量使用,因為索引的維護也是需要耗費系統性能的。
2、優化查詢語句
①盡量避免在where子句中使用!= 或<>操作符、關鍵字or,如果使用了此類字符,引擎將放棄使用索引而進行全表掃描。
②謹慎使用in 和not in ,可考慮用between或exists代替
如:select name from a where name in(select name from b)
改為: select name from a where exists(select 1 from b where name=a.name)
③盡量避免*,不需要的字段不要返回。
④盡量避免多表連接
⑤多次使用的語句,應使用存儲過程,存儲過程是存儲在服務器上的一組預編譯的SQL語句,類似于批處理文件,它具有對數據庫立即訪問的功能,數據處理極為迅速。
3、合理使用數據類型
盡量使用數子型字段,只包含數值信息的字段盡量不要設計為字符型,這樣會降低查詢和連接的性能,并增加存儲開銷。盡可能使用varchar/nvarchar代替char/nchar,因為變長字段存儲空間小,節省空間,另外,在一個相對較小的字段內搜索效率顯然要高一些。
再一個就是在程序執行過程中如何提高查詢數據的效率。
1、如使用foreach代替for循環,foreach的執行效率要高于for循環。
2、要控制程序和數據庫的連接次數。根據數據規模,可以把數據庫中的數據查到內存中進行操作。這里要詳細說一下,因為我就犯過此類錯誤。
比如這樣一個界面:從書籍信息表里查詢出所有的書籍信息,顯示在一個數據網格中,然后在文本框里,輸入書籍編碼信息,匹配數據表中的書籍編碼字段,進行模糊查找某種書籍。我當時就在文本框改變事件里,進行模糊查找,執行查詢語句。后來測試的時候,打開了數據庫跟蹤,發現模糊查找的時候,程序和數據庫的交互特別頻繁,簡直到了驚人的地步。后來我就做了這樣的修改,把所有數據查詢到數據網格中,這樣所有的數據就從數據庫到了本地內存中,然后,在從數據網格中進行匹配查找。把不符合匹配條件的記錄隱藏(或刪除)掉,這樣就完成了數據的查詢。雖然會增加本地內存的壓力,但是隨著技術的進步計算機的內存越來越大,只要數據不是特別的巨大,如動輒幾萬幾十萬,都可以很好的完成應用。

轉載于:https://blog.51cto.com/wangtao1017/1073173

總結

以上是生活随笔為你收集整理的关于程序中查询效率的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。