SqlServer規範, 標記下

2021-09-08 08:22:10 字數 2643 閱讀 2697

mysql:

只允許使用儲存過程訪問資料庫

應用中呼叫mysql儲存過程的方式

儲存過程編寫規範

儲存過程入口引數命名規則

臨時表命名規則

慎用臨時表

session級變數(@字首)的使用

使用on duplicate key update子句

mysql的時間型別

字符集處理注意事項

rowcount相關

對於sqlserver中單列xml的替換

對group by子句的優化

select * 相關

關於往表新增新字段或索引

delete中別名的使用

注釋項說明 (「--  ...」)

版本控制規範

更新規範  內部wiki

範例:

delimiter $$

drop

procedure

ifexists `usp_getscore`$$

create definer=`admin`@`%` procedure `usp_getscore`(

v_userid int

)begin

declare v_score int;

declare v_bscore int;

set v_score =

0;set v_bscore =

0;select score into v_score from up_user

where userid = v_userid;

select bussinessscore into v_bscore from up_serviceex

where userid = v_userid;

select v_score,v_bscore;

end$$

delimiter ;

-- 索引順序需要注意
案例2:

update cf_transfercache set

currentstate=v_state where

cacheid = concat(cast(v_ownerid as char), v_fileid, v_target) and

ownerid=v_ownerid and

fileid=v_fileid and

servicecode=v_servicecode and

target=v_target;

key `ix_cf_transfercache_ofts` (`ownerid`,`fileid`,`target`,`servicecode`)

--別名要寫全

select  a.col1,a.col2,b.col3,b.col4

from a inner join b

on a.fileid = b.fileid

where a.groupid = v_groupid and 

expiretime > v_expiretimepoint  -- 缺失別名

order by a.createtime desc;

sqlserver

儲存過程要有

異常處理部分,確保過程的可執行;

盡量在指令碼加入設計思路的概要

注釋。無法引數化的sql會造成的不良影響:

•每次執行都會造成sql server

重新編譯生成執行計畫, 浪費cpu •

執行計畫不可重用, 造成sql server快取大量無用的執行計畫, 從而

浪費記憶體空間

•有些情況下, 可能生成不穩定的執行計畫, 可能生成非期望的執行計畫(比如生成

低效的index scan

或者table scan), 從而導致db突然緩慢。

謹慎使用where子句中效率比較低的條件

<> 操作符

不等於操作符無法利用索引, 慎用

條件欄位中的計算表示式

如果在條件欄位中使用計算, 那麼將無法利用索引, 慎用

like子句

索引欄位為varchar型別,字首匹配索引無效

like 『abc%』會利用索引, 但like 『%abc』不會利用索引

時間字段

在要約束時間範圍時,若要大於某個時間時,盡量使用》=?

「>」需要全掃瞄索引比較, 「=」能快速定位到指定的值,再比較大小,

這能減少檢索的時間,快速定位記錄。

慎用in語句, 使用join語句代替

嚴格匹配where子句中的資料型別

select * from sms_molog where srcmobileno = 13820120305,這裡srcmobileno為varchar(64),後面值是整型,型別匹配,索引不起作用,導致乙個index scan,非常緩慢。

對於復合的條件, 使用索引暗示指定使用的索引

某些情況下, 由於統計資訊的變化,導致執行計畫不合理,特別是在多索引的情況下,這時盡量使用索引暗示,如:

select  * from sms_molog with(

nolock

, index(

ix_sms_molog_srcmobileno

)) where srcmobileno = @mobileno and time > @time

zkw線段樹 標記下放

zkw線段樹的標記上傳好像只能做區間修改的rmq,但標記下放應用面就與樸素線段樹差不多了,但是漂亮很多。在進行修改或詢問時,我們先將當前區間的標記全部下放,從左右開區間端點從頂向下跑一邊下放就是,同時,對於修改後,再從左右區間把祖先更新,zkw的非遞迴性質發揮的淋漓盡致。其實很好編,下面兩道題都是1...

NOIP模擬 線段樹 標記下傳 Query

題目描述 萬惡的大頭又出現了!他正在玩乙個智障遊戲 打怪獸。現在大頭的螢幕上出現了一排怪獸,每只怪獸頭上有乙個血條,每次大頭可以選擇乙個區間進行攻擊,攻擊值為 k 這個區間中血量小於 k 的怪獸都會被大頭無情地乾掉,當然怪獸不會坐以待斃,對於乙個區間的怪獸,他們會在某個時刻血量同時加 x 大頭頭雖然...

sql server命名規範

命名規範 表 表名如order useraccout 符合以下規範 1.統一採用單數形式,反對orders 2.首字母大寫,多個單詞的話,單詞首字母大寫,反對order useraccout order 3.避免中文拼音,反對agentbaoci 4.避免下劃線連線,反對user accout 下劃...