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 下劃...