導航:首頁 > 面試求職 > sql語句優化面試題

sql語句優化面試題

發布時間:2021-02-21 08:33:30

『壹』 面試中常問:mysql資料庫做哪些優化也提高mysql性能

在開始演示之前,我們先介紹下兩個概念。


概念一,數據的可選擇性基數,也就是常說的cardinality值。


查詢優化器在生成各種執行計劃之前,得先從統計信息中取得相關數據,這樣才能估算每步操作所涉及到的記錄數,而這個相關數據就是cardinality。簡單來說,就是每個值在每個欄位中的唯一值分布狀態。


比如表t1有100行記錄,其中一列為f1。f1中唯一值的個數可以是100個,也可以是1個,當然也可以是1到100之間的任何一個數字。這里唯一值越的多少,就是這個列的可選擇基數。


那看到這里我們就明白了,為什麼要在基數高的欄位上建立索引,而基數低的的欄位建立索引反而沒有全表掃描來的快。當然這個只是一方面,至於更深入的探討就不在我這篇探討的范圍了。


概念二,關於HINT的使用。


這里我來說下HINT是什麼,在什麼時候用。


HINT簡單來說就是在某些特定的場景下人工協助MySQL優化器的工作,使她生成最優的執行計劃。一般來說,優化器的執行計劃都是最優化的,不過在某些特定場景下,執行計劃可能不是最優化。


比如:表t1經過大量的頻繁更新操作,(UPDATE,DELETE,INSERT),cardinality已經很不準確了,這時候剛好執行了一條SQL,那麼有可能這條SQL的執行計劃就不是最優的。為什麼說有可能呢?


來看下具體演示


譬如,以下兩條SQL,

『貳』 sql語句的面試題求解答啊,一共三個表,懸賞100啊

1,select e_name from employee where e_hiredate>to_date('2001-01-01','YYYY-MM-dd') and
e_hiredate<to_date('2003-01-01','YYYY-MM-dd') and dept_id in(select dept_id from depar where comp_id in (select comp_id from comp where comp_name=''));
2,update employee set e_level=e_level+1,e_hiredate=sysdate where dept_id in(select dept_id from deptar where dept_name='監察部')

『叄』 這幾個SQL語句面試題該怎麼寫

第一題:

selecta.name
fromemployeealeftjoin
(selectt.dptid,avg(t.salary)avgsal
fromemployeet
groupbyt.dptid)bona.dptid=b.dptid
wherea.salary>b.avgsal

第二題

selectcount(a.name),a.dptid
fromemployeealeftjoin
(selectt.dptid,avg(t.salary)avgsal
fromemployeet
groupbyt.dptid)bona.dptid=b.dptid
wherea.salary>b.avgsal
groupbya.dptid

第三題:

selectavg(t.salary)
fromemployeet
wheret.salary>6000

『肆』 SQL語句面試題

SELECT*,
(SELECTCOUNT(*)FROM(SELECTCOUNT(*),b.sidFROMscbLEFTJOINcoursecONb.Cid=c.CidGROUPBYb.sid,c.tid)owWHEREow.sid=a.sid)as'
選課數量',
(SELECTsum(Score)FROMScdWHEREa.sid=d.sid)as'總成績'
FROMstudenta
;

SELECTd.sid,d.snamefromteachera
LEFTJOINcoursebona.tid=b.tid
LEFTJOINscconc.cid=b.cid
leftJOINstudentdONd.sid=c.sid
WHEREa.tname='葉萍';

SELECTsid,sname
FROMstudent
WHEREsidin(selecta.sid
FROMscAleftjoinscbona.sid=b.sid
WHEREa.cid=1andb.cid=2anda.score>b.score)

SELECTsc.Sid,sum(CASEWHENc.Cname='
數學'thensc.Scoreelse0end)數學,SUM(casewhenc.Cname='物理
'THENsc.ScoreELSE0END)物理,AVG(sc.Score)平均分
FROMsc
INNERJOINCourseconsc.Cid=c.Cid
WHEREc.Cnamein('數學','物理')
GROUPBYsc.Sid
ORDERBYAVG(sc.Score)DESC

insertintoSc(Sid,Cid,Score)values(003,3,85);

insertintoSc(Sid,Cid,Score)values(003,3,30);

首先這個不知道是你i寫錯了還是怎麼一個人化學成績有2個所以我在這里按照你這個上做的查詢所以有一個人是選了單個課程

『伍』 SQL語句問題 面試題

select * from Voucher where 發生額>(select 發生額 from Voucher where 科目代碼=101)

『陸』 sql語句 面試題

A.創建表格CODE省略

註明:學生表PK stu_id 課程表pk cos_id 分數表PK enrollment_id FK stu_id,cos_id

B.插入數據code省略

C.Query

  1. select s.stu_id,stu_name,count(cos_id) from student s,enrollments e where s.stu_id = e.stu_id and e.grade>60 group by s.stu_id,stu_name;

  2. select e.stu_id,s.stu_name,c.cos_name from student s,enrollments e,course c

    where s.stu_id = e.stu_id

    and e.cos_id = c.cos_id

    and c.cos_name = 'CHINESE'

    and s.stu_name like 'W%';

  3. select stu_id,stu_name from (select e.stu_id,stu_name,cos_name from enrollments e,student s,course c

    where s.stu_id = e.stu_id

    and e.cos_id = c.cos_id

    and c.cos_name IN ('CHINESE','MUSIC'))

    group by stu_id,stu_name

    having count(cos_name) = 2

  4. select distinct e.cos_id,c.cos_name,count(e.stu_id) stu_count,count(e.stu_id)-NVL(A.FAIL,0) upscore,(count(e.stu_id)-NVL(A.FAIL,0))/count(e.stu_id) rate from

    (select cos_id,count(stu_id) fail from enrollments where grade<60 group by cos_id) a,enrollments e,course c

    where e.cos_id = a.cos_id(+)

    and e.cos_id = c.cos_id

    group by e.cos_id,NVL(a.fail,0),c.cos_name;

  5. update student

    set avg_grade =(select avg(grade) X from enrollments group by stu_id

    having student.stu_id = enrollments.stu_id);

  6. select stu_id,avg(grade) from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)

    group by stu_id

    having count(*)<=2

    UNION

    select A.stu_id,avg(A.grade)from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments) A,

    (select stu_id,count(*) c from

    (select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)

    group by stu_id) B

    where A.stu_id = B.stu_id

    and A.x>1 and x<B.c

    group by A.stu_id,b.c

_________________________________________________

環境:oracle 10g/TOAD 以上代碼均通過測試,如有問題,請聯系,謝謝

『柒』 面試的時候人家問我,對SQL的優化,維護了解多少,我說:不是很清楚:(

1.你把學校里來面學的東源西都弄通,弄懂就可以了,基本的概念和原理都能說出來,如你說的sql優化就是:為資料庫建立索引,如何提高檢索速度之類的問題。教科書上都有說啊。
2.面試不是說一定要什麼都懂才能去面的,你要找多一點面試經驗,面試經常問什麼問題,比如指針,鏈表等,有針對性地准備一下,不用全部一骨碌地看。
3.積累經驗和編程作品,多做項目,自己多寫些程序。面試就有了籌碼。

『捌』 sql語句面試題

a)selectpnameas'商品名',avg(qty)as平均銷售量froms,p,mwherem.city='上海'ands.mno=m.mnoandp.pno=s.pno,selectp.Pno,p.pname,sum(s.qty)fromsleftjoinpons.pno=p.pnoleftjoinmonp.Mno=m.Mnowherem.city='上海市'groupbyp.Pno,p.pname,p.city,p.colorb)、先刪除Sale表的外鍵PNO,再刪除gds表。c)聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系區別:1、視圖是已經編譯好的sql語句。而表不是2、視圖沒有實際的物理記錄。而表有。3、表是內容,視圖是窗口4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改5、表是內模式,視圖是外模式6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。

『玖』 SQL 面試題之三。。。有難度。。。

一般是寫一個存儲過程,用個游標循環每條處理,很容易就搞定了。以後變動也靈內活。
如果不用存儲容過程,單SQL語句實現,可以這樣:
update salary t1
set t1.s = (select sum(t2.s)
from salary t2
where t2.year >=add_month(t1.year,-24)
and t2.year <=add_month(t1.year,-12)
);

閱讀全文

與sql語句優化面試題相關的資料

熱點內容
晉升考核自我評價 瀏覽:480
職場新人自我介紹日語 瀏覽:700
職攜求職公寓 瀏覽:354
醉駕人找工作 瀏覽:973
百度廈門六中藝術特長報名表 瀏覽:868
勁霸經編面試 瀏覽:364
小孩綜合素質自我評價 瀏覽:470
玉環學校洗碗招聘信息 瀏覽:15
教師教育自我評價 瀏覽:192
2014合肥168中學特長生音樂錄取名單 瀏覽:478
應屆生面試自我介紹範文3分鍾 瀏覽:800
丹陽人才招聘網 瀏覽:72
生物學科特長怎麼寫 瀏覽:250
昌碩面試後多久通知 瀏覽:925
陝西省鐵餅特長生 瀏覽:751
碩展科技有限公司招聘 瀏覽:346
2019年南陽卷煙廠招聘信息 瀏覽:461
時尚招聘信息 瀏覽:341
安吉潔美電子招聘信息 瀏覽:106
個人簡歷問候語 瀏覽:924