delete ----逐行清楚,不適合大量資料
delete from tablename where 1
=1
truncate ----刪除所有資料,保留表結構,不能撤銷還原
truncate table tablename
drop ----刪除表,資料和表結構一起刪除,最快速
## 重新建立
drop table if exists `docker2`;
create table `docker2` (
`name` varchar
(255
) not null
, `path` varchar
(500
) default null
, `docker1_name` varchar
(255
) not null
, `tag1` varchar
(255
) default null
, `tag2` varchar
(255
) default null
, `tag3` varchar
(255
) default null
, `tag4` varchar
(255
) default null
, `tag5` varchar
(255
) default null
, `tag6` varchar
(255
) default null
, `tag7` varchar
(255
) default null
, `tag8` varchar
(255
) default null
, `tag9` varchar
(255
) default null
, primary key (`docker1_name`,`name`)
) engine=innodb default charset=utf8;
max
(case when .
.. then ...
else..
. end)
需要與 *
*group by*
*一起使用。
case when :實現行列轉換時會出現多條記錄,若不聚合直接進行group by分組,則會檢索第一條資料,若使用聚合max
()函式再盡心group by 分組,就會檢索最大值然後進行分組
eg:多表關聯實現行列轉換
"listunitrecentreportsql"
>
select
nu.uuid,
nu.code,
nu.name,
nu.unit_nature,
dict.dict_label as unit_nature_name,
nu.sys_code,
aa.liaisons,
aa.telephone,
aa.mobilephone,
nuf.year,
nuf.m1,
nuf.m2,
nuf.m3,
nuf.m4,
nuf.m5,
nuf.m6,
nuf.m7,
nuf.m8,
nuf.m9,
nuf.m10,
nuf.m11,
nuf.m12
from
left join
view_net_unit_contact_person aa
onnu.uuid = aa.uuid
left join
(select net_unit_uuid,
year,
max(case when month =
1 then create_date end) as m1,
max(case when month =
2 then create_date end) as m2,
max(case when month =
3 then create_date end) as m3,
max(case when month =
4 then create_date end) as m4,
max(case when month =
5 then create_date end) as m5,
max(case when month =
6 then create_date end) as m6,
max(case when month =
7 then create_date end) as m7,
max(case when month =
8 then create_date end) as m8,
max(case when month =
9 then create_date end) as m9,
max(case when month =
10 then create_date end) as m10,
max(case when month =
11 then create_date end) as m11,
max(case when month =
12 then create_date end) as m12
from
( select
net_unit_uuid,
year
(create_date) as year,
month
(create_date) as month,
max(create_date) create_date
from
where 1=1
<
if test=
"unitrecentreport.year != null"
>
and year
(create_date)
= #>
group by net_unit_uuid,
year
(create_date)
,month
(create_date)
) as t
group by net_unit_uuid,year
) nuf
onnuf.net_unit_uuid=nu.uuid
left join
(select dict_value, dict_label from sys_dict_data where dict_type=
'unit_nature'
) dict
onnu.unit_nature = dict.dict_value
<
if test=
"useruuid != null"
>
left join
onnum.net_unit_uuid = nu.uuid
>
where 1=1
<
if test=
"unitrecentreport.name != null"
>
and nu.name like concat
('%'
, #,
'%')
>
<
if test=
"unitrecentreport.syscode != null"
>
and nu.sys_code like concat(#,
'%')
>
<
if test=
"useruuid != null"
>
and num.user_uuid = #
>
order by nuf.year, nu.sys_code
<
/sql>
做大量刪除資料
1.
//把要刪除大量資料的表中不需要刪除的資料轉存到另外一張表中
insert into 新建的表 select * from 表 where ...
2.//同時重明明兩張表,間接實現資料刪除操作
rename table t to t_old, 新建的表 to t;
3.將那個沒用的表刪除掉 drop table t_old
eg:
insert into 新建的表 select * from 表 where 部門標號 !=
20//將不刪除的表轉存
rename table 表 to t_old, 新建的表 to 表;
//重新定義表名
刪除不要的表 drop table t_old
SQL語句優化方法
1.把資料 日誌 索引放到不同的i o裝置上,增加讀取速度,以前可以將tempdb應放在raid0上,sql2000不在支援。資料量 尺寸 越大,提高i o越重要 2.縱向 橫向分割表,減少表的尺寸 3.根據查詢條件,建立索引,優化索引 優化訪問方式,限制結果集的資料量。注意填充因子要適當 最好是使...
SQL 語句中優化方法
整理一下以前的一些用sql語句的習慣。先提乙個概念掃瞄引數 sarg 用於限制搜尋的乙個操作,因為它通常是指乙個特定的匹配,乙個值得範圍內得匹配或者兩個以上條件的 and 連線。1.or 會引起全表掃瞄.如 name 張三 and 5000 符合sarg 而 name zhangsan or 500...
SQL語句常見優化方法
在查詢語句前使用explain關鍵字 變體 explain extended select show warnings 檢視優化後的語句 方式一 select from a join b using 兩張表有相同的字段 方式二 select from a join b on 同 select fro...