常用的查詢
select
select中不要使用*代替所有列,應該顯示指明查詢列
1. 一方面按需獲取指定列可以節約系統資源,另外從相容性角度可以減少表變化帶來的影響
2. sql解析過程中,需要把「*」轉換為所有列表,這個工作需要查詢資料字典完成
count
count(1) count(1)所有行數,包括null
count(*) count(*)所有行數,包括null
count(列名) count(列名)只統計非null
1.列名為主鍵, count(列名) 會比 count(1) 快 ?
2.列名不為主鍵, count(1) 會比 count(列名) 快 ?
3. count(*)會掃瞄全表的行列,不推薦使用
索引類似書本的目錄,目錄可以快速找到所在頁數,資料庫中索引可以幫助快速找到資料,而不用全表掃瞄。
優點加快了資料庫檢索的速度,經常是一到兩個數量級的效能提公升,且隨著資料數量級增長。
缺點索引的建立和維護存在消耗,索引會占用物理空間,且隨著資料量的增加而增加。
在對資料庫進行增刪改時需要維護索引,所以會對增刪改的效能存在影響。
常出現在where、grouu by、order by等關鍵字後的表字段考慮建立索引。
索引使用建議
不要在選擇性較低的字段建立索引
建立復合索引時應該將最常用作限制條件的列放在最左邊,依次遞減.最佳左字首特性(select col from t where a=xx and b=xx;)
查詢列與索引列次序一致
把過濾記錄數最多的條件放在最前面
盡量使用前端匹配的模糊查詢。 abc% %abc%
避免在索引列上使用計算
避免在索引列上使用is null和is not null
『!='將不使用索引
避免改變索引列的型別
用union替換or (適用於索引列)
通用建議
減少訪問資料庫的次數
使用表的別名(alias)
sql語句用大寫(oracle)
在可以使用union all時不要用union
users表
user_group表
select * from test.users u left join test.user_group ug on u.id=ug.user_id and u.id='1';
select * from test.users u left join test.user_group ug on u.id=ug.user_id where u.id='1';
上面2個sql結果發現很奇怪的現象。
sql解析順序
outer join執行過程分為4步:
1.先對兩個表執行交叉連線
2.應用on篩選器
3.新增外部行
4.應用where篩選器
現在解釋一下
select * from test.users u left join test.user_group ug on (u.id=ug.user_id and u.id='1');
首先從user_group表中選出user_id=1+group_id=1的這一行
然後再和users進行left join關聯,那麼users表中的所有行都必須包含在結果集中。
Oracle 刪除新增表字段
原文 1.新增字段 alter table 表名 add 字段 字段型別 default 輸入預設值 null not null 2.新增備註 comment on column 庫名.表名.欄位名 is 輸入的備註 如 我要在ers data庫中 test表 document type欄位新增備註...
oracel 新增表字段 極其備註
alter table tissue extract produce add wz from varchar2 50 alter table tissue extract produce add now analysis type varchar2 50 alter table tissue ext...
Hive 新增 更改表字段型別
新增字段表 alter table 表名 add columns 欄位名 資料型別 alter table table name add columns c time string comment 當前時間 正確,新增在最後 alter table table name change c time ...