第一篇:查詢Oracle正在執(zhí)行和執(zhí)行過的SQL語句
查詢Oracle正在執(zhí)行和執(zhí)行過的SQL語句
--正在執(zhí)行的select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT
from v$session a, v$sqlarea bwhere a.sql_address = b.address
---執(zhí)行過的select b.SQL_TEXT,b.FIRST_LOAD_TIME,b.SQL_FULLTEXT
from v$sqlarea b
where b.FIRST_LOAD_TIME between '2009-10-15/09:24:47' and'2009-10-15/09:24:47' order by b.FIRST_LOAD_TIME
(此方法好處可以查看某一時(shí)間段執(zhí)行過的sql,并且 SQL_FULLTEXT 包含了完整的 sql 語句)其他
select OSUSER,PROGRAM,USERNAME,SCfrom V$SESSION A LEFT JOIN V$SQL B ON A.SQL_ADDRESS=B.ADDRESS AND A.SQL_HASH_VALUE=B.HASH_VALUE order by b.cpu_time desc
HEMANAME,B.Cpu_Time,STATUS,B.SQL_TEXTselect address, sql_text, piece
from v$session, v$sqltextwhere address = sql_address
--and machine = < you machine name >order by address, piece
查找前十條性能差的sql.SELECT * FROM(select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
order BY disk_reads DESC)where ROWNUM<10;
查看占io較大的正在運(yùn)行的sessionfacebook:http:// SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,se.MODULE,、se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changes FROM v$session se,v$session_wait st,v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC
第二篇:執(zhí)行多條SQL語句
執(zhí)行多條SQL語句
使用mysqli一次執(zhí)行多條SQL語句
$mysqli=new MySQLi(“l(fā)ocalhost”,“root”,“",”xiaoqiangdb“);
/*==========================沒有結(jié)果集:insert update delete==========================*/
$sqls=”insert into shops(name,price,num,desn)values('book1','12.16','5','good');“;
$sqls.=”updated shops set name='testname' where id>50;“;
$sqls.=”delete from shops where id < 20“;
if($mysqli->multi_query($sqls)){
echo ”多條語句執(zhí)行成功!
“;
echo ”最后插入的ID:“.$mysqli->insert_id.”
“;
//echo ”影響的行數(shù):“.$mysqli->affected_rows;//不準(zhǔn)確!
}else{
echo ”ERROR“.$mysqli->errno.”---“.$mysqli->error;
}
/*==========================有結(jié)果集:select==========================*/$sqls=”select current_user();“;
$sqls.=”desc shops;“;
$sqls.=”select * fron shops“;
if($mysqli->multi_query($sqls)){
echo ”多條語句執(zhí)行成功!
“;
do{
$result=$mysqli->store_result();//獲取結(jié)果集
echo '
'.$field->name.' | ';
---|
'.$col.' | ';
if($mysqli->more_results()){//判斷還有沒有結(jié)果集echo ”
“;
}
}while($mysqli->next_result());//取得下一個(gè)結(jié)果集}else{
echo ”ERROR“.$mysqli->errno.”---".$mysqli->error;}
$mysqli->close();
?>
第三篇:Oracle SQL執(zhí)行緩慢的原因以及解決方案
Oracle SQL執(zhí)行緩慢的原因以及解決方案 Oracle SQL執(zhí)行緩慢的原因的分析,如果Oracle數(shù)據(jù)庫中的某張表的相關(guān)數(shù)據(jù)已是2億多時(shí),同時(shí)此表也創(chuàng)建了相關(guān)的4個(gè)獨(dú)立的相關(guān)索引。由于業(yè)務(wù)方面的需要,每天需分兩次向此表中插入300萬條記錄。
由于數(shù)據(jù)量大,每次插入耗時(shí)3個(gè)小時(shí)以上,嚴(yán)重影響效率。
因此,修改了系統(tǒng)的算法,將此表中只存儲(chǔ)當(dāng)天新增記錄。將此表truncate后,第二天執(zhí)行對(duì)此表的update操作時(shí),非常耗時(shí)。表中有2億多條數(shù)據(jù)的時(shí)候,此Oracle sql語句耗時(shí)59秒;表中有300萬條數(shù)據(jù)的時(shí)候,此Oracle sql語句耗時(shí)幾個(gè)小時(shí)。
咨詢DBA后,得出結(jié)論,需重建索引。重建后,6秒完成此操作。但第三天問題依然出現(xiàn)。DBA正在查找原因。難道每次truncate表,都需要重建索引?
對(duì)于這個(gè)問題,DBA也沒有給出合理的解釋,推測(cè)主要原因是Oracle復(fù)雜的查詢優(yōu)化算法。最終,DBA給出的解決方案:
1.truncate table....2.drop index.....3.insert data.....4.create index...5.analyze table table_name compute statistics;
重新生成統(tǒng)計(jì)數(shù)據(jù)
調(diào)整后,整個(gè)操作耗時(shí)非常少。
第四篇:SQL查詢語句
SQL查詢語句
第一次:查詢(顯示)、條件、排序、空記錄
第二次:通配符、生成表、文件(記事本)、數(shù)組、臨時(shí)表,數(shù)學(xué)函數(shù)、分組、嵌套查詢
第三次:插入記錄、刪除記錄、更新記錄 第四次:超連接、新建(打開)數(shù)據(jù)庫、表的建立、表的刪除、第五次 表結(jié)構(gòu)的修改,添加記錄 顯示同張芳同一天出生的學(xué)生的信息 格式:
1、查詢(顯示)記錄
顯示所有男學(xué)生的學(xué)號(hào),姓名,性別 區(qū)分:字段、條件、表名
Select 字段名列表(*)from 表名; where 條件表達(dá)式;
into table(dbf)文件名;
into cursor 臨時(shí)表名;
into array 數(shù)組名;
to file 文件名;
order by 字段名列表(asc desc);
group by 字段名 having 條件;
顯示所有大于平均分的學(xué)生的學(xué)號(hào)、姓名 顯示同E4掙同樣工資的職工信息
Select * from 職工 where 工資=(select 工資 from 職工 where 職工號(hào)=”E4”)職工(倉庫號(hào)C(10),職工號(hào) C(10),工資 N(10,2))
顯示所有工資大于1500的員工的倉庫號(hào)、職工號(hào)及所在的城市
2、插入記錄
Insert into 表名(字段名列表)values(記錄值)
3、刪除記錄
Delete from 表名 where 條件
4、更新記錄
Update 表名 set 字段名=記錄值; Where 條件
5、表的刪除
drop table 表名
6、表的建立
create table 表名(字段名 數(shù)據(jù)類型(寬度))
7、表結(jié)構(gòu)的修改select * from 職工where 職工號(hào)!=“E4” AND 工資=(select 工資 from 職工 where 職工號(hào)=“E4”)
alter table 表名
1)增加字段
alter table student add 身份證號(hào) c(10)
2)刪除字段
alter table student drop colum 身份證號(hào)
3)修改字段名
alter table student rename colum 出生日期 to 出生年月
4)增加字段有效性規(guī)則
alter table student alter 成績(jī) set check 成績(jī)>=0 and 成績(jī)<=100;
error “成績(jī)輸入錯(cuò)誤,成績(jī)應(yīng)該在0-100之間”
5)刪除字段有效性規(guī)則
alter table student alter 成績(jī) drop check 注意:
以上題目中用到的 SQL語句粘貼到計(jì)事本文件XY.TXT中(每行一條語句)。對(duì)兩個(gè)表操作的方法:
1)同時(shí)打開兩個(gè)表
select 倉庫.倉庫號(hào),城市,職工號(hào),工資 from 倉庫,職工;
where 職工.倉庫號(hào)=倉庫.倉庫號(hào) and 工資=1250
2)超連接(內(nèi)連接、左連接、右連接、全連
接)
內(nèi)連接:只顯示符合條件的記錄
左連接:顯示符合條件的記錄及第一個(gè)表中不符合條件的記錄
右連接:顯示符合條件的記錄及第二個(gè)表中不符合條件的記錄
全連接:顯示符合條件的記錄及第一、二個(gè)表中不符合條件的記錄
成績(jī)表(score)
學(xué)號(hào)姓名課程名成績(jī) 2001張三計(jì)算機(jī)10 2003張四英語20 2001張三語言30 2005張三數(shù)據(jù)40 2003張四計(jì)算機(jī)50
Select sum(成績(jī))from score group by 學(xué)號(hào)
Select sum(成績(jī))from score group by 課程名
select 字段名列表(*)from 表名;where 條件;
order by 字段名列表 asc|desc;
into table(dbf)表名;
into array 數(shù)組名;
to file 文件名;
into cursor 臨時(shí)表名
題目練習(xí)
實(shí)現(xiàn)以下功能:在考生文件夾下,打開“陶的數(shù)據(jù)庫”的數(shù)據(jù)庫,并利用SQL語句在該數(shù)據(jù)庫中新建一個(gè)表:gongzi(職工號(hào) c(4),實(shí)發(fā)工資 n(7,0)),將zhigong表中基本工資大于1330(含1330)的記錄存儲(chǔ)在gongzi表中,其中實(shí)發(fā)工資為:基本工資+加班費(fèi)(白天20,晚上30),最后將所有的SQL語句保存到考生目錄下的sqlanswer.txt文件中(自行建立,一行一條語句)
open database 陶的數(shù)據(jù)庫
create table gongzi(職工號(hào) c(4),基本工資 n(7,2))
select 職工號(hào),基本工資+白班*20+晚班*30 from zhigong;where 基本工資>1350 into array xy
insert into gongzi from array xy
第五篇:Sql語句查詢
sql語句多表連接查詢
在程序開發(fā)過程中,不僅可以對(duì)單一數(shù)據(jù)表進(jìn)行查詢,還可以進(jìn)行多表查詢,用戶通過多表查詢從多個(gè)表中提取出需要的數(shù)據(jù)。
多表查詢可以分為內(nèi)連接查詢、外連接查詢以及聯(lián)合查詢。
1.內(nèi)連接查詢
連接查詢是指通過各個(gè)表之間共同列的關(guān)聯(lián)性查詢數(shù)據(jù)。連接查詢分為內(nèi)連接查詢和外連接查詢。內(nèi)連接是將兩個(gè)相互交叉的數(shù)據(jù)集合中重疊部分的數(shù)據(jù)行連接起來,返回表示兩個(gè)數(shù)據(jù)集合之間匹配連接關(guān)系的數(shù)據(jù)行。
可以在FORM子句中使用INNER JOIN?ON?建立內(nèi)連接,也可以在WHERE子句中指定連接條件建立內(nèi)連接,例如:
select a.UserName,b.BookName,b.Datetm from UserInfo as a inner join SellSheet as b on a.UserID= b.UserID
也可以用下面的語句實(shí)現(xiàn)。
select a.UserName,b.BookName,b.Datetm from UserInfo as a,SellSheet as b where a.UserID=b.UserID
2.外連接查詢
外連接是對(duì)內(nèi)連接的擴(kuò)充,除了將兩個(gè)數(shù)據(jù)集合中重疊部分以內(nèi)的數(shù)據(jù)行連接起來之外,還可以根據(jù)要求返回左側(cè)或右側(cè)數(shù)據(jù)集合中非匹配的數(shù)據(jù),即左外連接(LEFT OUTER JOIN)和右外連接(RIGHT OUTER JOIN)。
l左外連接LEFT OUTER JOIN
左外連接LEFT OUTER JOIN邏輯運(yùn)算符除了返回兩個(gè)數(shù)據(jù)表中滿足連接條件的行,它還返回任何在后一個(gè)數(shù)據(jù)表中沒有匹配行的前一個(gè)數(shù)據(jù)表中的行。非匹配行的部分字段列作為空值返回。
l右外連接RIGHT OUTER JOIN
右外連接RIGHT OUTER JOIN是左外連接的反向連接。它除了返回兩個(gè)數(shù)據(jù)表中滿足連接條件的行,還返回任何在前一個(gè)數(shù)據(jù)表中沒有匹配行的后一個(gè)數(shù)據(jù)表中的行。非匹配行的部分字段列作為空值返回。
3.使用UNION進(jìn)行聯(lián)合查詢
使用UNION運(yùn)算符可以進(jìn)行聯(lián)合查詢。UNION運(yùn)算符連接多個(gè)SELECT語句,將兩個(gè)或更多查詢的結(jié)果組合為單個(gè)結(jié)果集,該結(jié)果集包含聯(lián)合查詢中所有查詢的全部行。使用UNION運(yùn)算符遵循的規(guī)則如下:
(1)在使用UNION運(yùn)算符組合的語句中,所有選擇列表的表達(dá)式數(shù)目必須相同(列名、算術(shù)表達(dá)式、聚集函數(shù)等)。
(2)在使用UNION組合的結(jié)果集中的相應(yīng)列必須具有相同數(shù)據(jù)類型,或者兩種數(shù)據(jù)類型之間必須存在可能的隱性數(shù)據(jù)轉(zhuǎn)換,或者提供了顯式轉(zhuǎn)換。例如,在datetime數(shù)據(jù)類型的列和binary數(shù)據(jù)類型的列之間不能使用UNION運(yùn)算符,除非提供了顯式轉(zhuǎn)換,而在money數(shù)據(jù)類型的列和int數(shù)據(jù)類型的列之間可以使用UNION運(yùn)算符,因?yàn)樗鼈兛梢赃M(jìn)行隱性轉(zhuǎn)換。
(3)結(jié)果集中列的名字或者別名是由第一個(gè)SELECT語句的選擇列表決定的。
注意:對(duì)數(shù)據(jù)表進(jìn)行聯(lián)合查詢時(shí),結(jié)果集中行的最大數(shù)量是各表行數(shù)之“和”,而對(duì)數(shù)據(jù)表進(jìn)行連接查詢時(shí),結(jié)果集中行的最大數(shù)量是各表行數(shù)之“積”。