欧美人两个人激情的免费视频_国产亚洲人成网站在线观看不卡_直接看毛片_免费乱理伦片在线观看app

十三年專注于網站建設與互聯網應用開發,低調、有情懷的網絡應用服務商!
南昌百恒科技微信公眾號 掃一掃關注
tel-icon全國服務熱線:400-680-9298,0791-88117053
掃一掃關注百恒科技微信公眾號

數據庫SQL開發規范是什么?

百恒 2023-03-09 16:41:04 537
? ? ? ?結構化查詢語言數據庫簡稱SQL,是對數據庫進行操作的一種語言,用于存取數據以及查詢、更新和管理關系數據庫系統,下面南昌網站建設開發公司百恒科技小編來跟大家聊一下數據庫SQL開發規范是什么。


數據庫SQL開發規范是什么


? ? ? ?一、建議使用預編譯語句進行數據庫操作

? ? ? ?預編譯語句可以重復使用這些計劃,減少SQL編譯所需要的時間,還可以解決動態SQL所帶來的SQL注入的問題,只傳參數,比傳遞SQL語句更效高,相同語句可以一次解析,多次使用,提高處理效率。推薦:MySQL數據庫開發的 36 條軍規!

? ? ? ?二、避免數據類型的隱式轉換

? ? ? ?隱式轉換會導致索引失效。如:select name,phone from customer where id = '111';

? ? ? ?三、充分利用表上已經存在的索引

? ? ? ?避免使用雙%號的查詢條件。

? ? ? ?如a like '%123%',(如果無前置%,只有后置%,是可以用到列上的索引的)

? ? ? ?一個SQL只能利用到復合索引中的一列進行范圍查詢

? ? ? ?如:有 a,b,c列的聯合索引,在查詢條件中有a列的范圍查詢,則在b,c列上的索引將不會被用到,在定義聯合索引時,如果a列要用到范圍查找的話,則要把a列放到聯合索引的右側。

? ? ? ?使用left join或 not exists來優化not in操作

? ? ? ?因為not in 也通常會使用索引失效。

? ? ? ?四、數據庫設計時,應該要對以后擴展進行考慮

? ? ? ?五、程序連接不同的數據庫使用不同的賬號,進制跨庫查詢

? ? ? ?1、為數據庫遷移和分庫分表留出余地

? ? ? ?2、降低業務耦合度

? ? ? ?3、避免權限過大而產生的安全風險

? ? ? ?六、禁止使用SELECT * 必須使用SELECT <字段列表> 查詢

? ? ? ?原因:

? ? ? ?1、消耗更多的CPU和IO以網絡帶寬資源

? ? ? ?2、無法使用覆蓋索引

? ? ? ?3、可減少表結構變更帶來的影響

? ? ? ?七、禁止使用不含字段列表的INSERT語句

? ? ? ?如:insert into values ('a','b','c');

? ? ? ?應使用insert into t(c1,c2,c3) values ('a','b','c');

? ? ? ?八、避免使用子查詢,可以把子查詢優化為join操作

? ? ? ?通常子查詢在in子句中,且子查詢中為簡單SQL(不包含union、group by、order by、limit從句)時,才可以把子查詢轉化為關聯查詢進行優化。

? ? ? ?子查詢性能差的原因是:

? ? ? ?1、子查詢的結果集無法使用索引,通常子查詢的結果集會被存儲到臨時表中,不論是內存臨時表還是磁盤臨時表都不會存在索引,所以查詢性能會受到一定的影響;

? ? ? ?2、特別是對于返回結果集比較大的子查詢,其對查詢性能的影響也會越大;

? ? ? ?3、由于子查詢會產生大量的臨時表也沒有索引,所以會消耗過多的CPU和IO資源,產生大量的慢查詢。

? ? ? ?九、避免使用JOIN關聯太多的表

? ? ? ?對于Mysql來說,是存在關聯緩存的,緩存的大小可以由join_buffer_size參數進行設置。

? ? ? ?在Mysql中,對于同一個SQL多關聯(join)一個表,則會多分配一個關聯緩存,如果在一個SQL中關聯的表越多,所占用的內存也會越大。

? ? ? ?如果程序中大量的使用了多表關聯的操作,同時join_buffer_size設置的也不合理的情況下,則容易造成服務器內存溢出的情況,也會影響到服務器數據庫性能的穩定性。

? ? ? ?同時對于關聯操作來說,會產生臨時表操作,影響查詢效率Mysql蕞多允許關聯61個表,建議不超過5個。

? ? ? ?十、減少同數據庫的交互次數

? ? ? ?數據庫更適合處理批量操作 合并多個相同的操作到一起,可以提高處理效率

? ? ? ?十一、對應同一列進行or判斷時,使用in代替or

? ? ? ?in的值不要超過500個in操作可以更有效的利用索引,or大多數情況下很少能利用到索引。

? ? ? ?十二、禁止使用order by rand() 進行隨機排序

? ? ? ?會把表中所有符合條件的數據裝載到內存中,然后在內存中對所有數據根據隨機生成的值進行排序,并且可能會對每一行都生成一個隨機值,如果滿足條件的數據集非常大,則會消耗大量的CPU和IO及內存資源。

? ? ? ?推薦在程序中獲取一個隨機值,然后從數據庫中獲取數據的方式

? ? ? ?十三、WHERE從句中禁止對列進行函數轉換和計算

? ? ? ?對列進行函數轉換或計算時會導致無法使用索引。

? ? ? ?不推薦:

? ? ? ?where date(create_time)='20190101'

? ? ? ?推薦:

? ? ? ?where create_time >= '20190101' and create_time < '20190102'

? ? ? ?十四、在明顯不會有重復值時使用UNION ALL而不是UNION

? ? ? ?1、UNION會把兩個結果集的所有數據放到臨時表中后再進行去重操作

? ? ? ?2、UNION ALL不會再對結果集進行去重操作

? ? ? ?十五、拆分復雜的大SQL為多個小SQL

? ? ? ?1、大SQL:邏輯上比較復雜,需要占用大量CPU進行計算的SQL

? ? ? ?2、MySQL:一個SQL只能使用一個CPU進行計算

? ? ? ?3、SQL拆分后可以通過并行執行來提高處理效率

? ? ? ?以上是南昌網站建設開發公司百恒科技小編要跟大家聊到的關于數據庫SQL開發規范的內容,希望能夠對大家有所幫助,想要了解更多關于這方面的內容,歡迎留言咨詢百恒科技,百恒科技是一家有著16年開發經驗的網絡公司,專注于南昌網站建設開發南昌小程序開發等互聯網服務!


相關文章推薦? ?:? ? MySQL數據庫命令規范是什么?? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? MySQL數據庫操作行為規范是什么?? ? ??
400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
備案專線 備案專線
 
售后服務 售后服務
 
×