MYSQL視圖 索引 分頁(yè)查詢 SQL語(yǔ)句常見(jiàn)面試題

MYSQL索引類型

按邏輯來(lái)分:

1.主鍵索引
是一種特殊的唯一索引睹晒,不允許有空值

創(chuàng)建斑粱、刪除語(yǔ)句:
alter table [table_name] add primary key (column_name)
create table [table_name](
id int not null,
primary key (id)
)
alter table drop primary key

2.普通索引(單例索引)
對(duì)表中一個(gè)列進(jìn)行索引

create index index_name on [table_name] (column_name)
alter table [table_name] add index [index_name] (column_name)
alter table drop index [index_name]

3.復(fù)合索引(多列索引)
對(duì)表中多個(gè)列進(jìn)行索引

alter table [table_name] add index [index_name]
(column_name1,column_name2)

4.全文索引
可以在char凉唐、varchar或text類型的列上創(chuàng)建受葛。

alter table [table_name] add fulltext (column_name)

5.唯一索引
當(dāng)前列中的數(shù)據(jù)具有唯一性

alter table [table_name] add unique [index_name] (column_name)

在實(shí)際操作過(guò)程中开皿,應(yīng)該選取表中哪些字段作為索引锡足?

1.選擇唯一性索引
2.為經(jīng)常需要排序、分組和聯(lián)合操作的字段建立索引
3.為常作為查詢條件的字段建立索引
4.限制索引的數(shù)目
5.盡量使用數(shù)據(jù)量少的索引
6.盡量使用前綴來(lái)索引
7.刪除不再使用或者很少使用的索引

視圖作用

測(cè)試表:user有id蹬敲,name暇昂,age字段
測(cè)試表:product有id,name伴嗡,price字段
測(cè)試表:user_product有id急波,uid,pid字段

提高了重用性瘪校,就像一個(gè)函數(shù)

比如我要獲取一張用戶表和一張商品表的中用戶購(gòu)買了那個(gè)商品的信息
select * from user as u , products as p, user_product as c where u.id=c.u_id and p.id=c.p_id;

創(chuàng)建視圖
create view u_p_userage as select u.id as uid,u.name as uname,p.id as pid,p.name as pname from user as u , products as p, user_product as c where u.id=c.u_id and p.id=c.p_id

利用視圖進(jìn)行操作
對(duì)數(shù)據(jù)庫(kù)重構(gòu)澄暮,卻不影響程序的運(yùn)行

假設(shè)我對(duì)用戶表進(jìn)行拆分,比如變成 了 id和age為一張表 id和name為一張表 那么這個(gè)時(shí)候 再去select *from user就不管用了阱扬。

那么我可以創(chuàng)建視圖 create view user as select....去重新寫sql語(yǔ)句這樣就能保證不改變腳本程序泣懊。

提高了安全性能÷榛蹋可以對(duì)不同的用戶

設(shè)定不同的視圖馍刮。例如:某用戶只能獲取user表的name和age數(shù)據(jù),不能獲取sex數(shù)據(jù)等其他數(shù)據(jù)窃蹋。

create view other as select a.name, a.age from user as a;

sql語(yǔ)句面試題:

表內(nèi)容:
2005-05-09 勝
2005-05-09 勝
2005-05-09 負(fù)
2005-05-09 負(fù)
2005-05-10 勝
2005-05-10 負(fù)
2005-05-10 負(fù)
如果要生成下列結(jié)果, 該如何寫sql語(yǔ)句?
勝 負(fù)
2005-05-09 2 2
2005-05-10 1 2

select rq,sum(case when shengfu='勝' then 1 else 0 end) as '勝',sum(case when shengfu='負(fù)' then 1 else 0 end) as'負(fù)' from tmp group by rq

表中有A B C三列,用SQL語(yǔ)句實(shí)現(xiàn):當(dāng)A列大于B列時(shí)選擇A列否則選擇B列卡啰,當(dāng)B列大于C列時(shí)選擇B列否則選擇C列。

select (case when a>b then a else b end),(case when b>c then b else c end) from table_name

請(qǐng)取出tb_send表中日期(SendTime字段)為當(dāng)天的所有記錄?(SendTime字段為datetime型警没,包含日期與時(shí)間)

select * from table_name where datediff(curdate(),SendTime)=0

有一張表匈辱,里面有3個(gè)字段:語(yǔ)文,數(shù)學(xué)杀迹,英語(yǔ)亡脸。其中有3條記錄分別表示語(yǔ)文70分,數(shù)學(xué)80分树酪,英語(yǔ)58分浅碾,請(qǐng)用一條sql語(yǔ)句查詢出這三條記錄并按以下條件顯示出來(lái)(并寫出您的思路):
大于或等于80表示優(yōu)秀,大于或等于60表示及格嗅回,小于60分表示不及格及穗。
顯示格式:
語(yǔ)文 數(shù)學(xué) 英語(yǔ)
及格 優(yōu)秀 不及格

select (case when '語(yǔ)文'>=80 then '優(yōu)秀' case when '語(yǔ)文'>=60 then ’及格‘ else '不及格' end) as '語(yǔ)文' , (case when '數(shù)學(xué)'>=80 then '優(yōu)秀' case when '數(shù)學(xué)'>=60 then ’及格‘ else '不及格' end) as '數(shù)學(xué)' ,(case when '英語(yǔ)'>=80 then '優(yōu)秀' case when '英語(yǔ)'>=60 then ’及格‘ else '不及格' end) as '英語(yǔ)' from table_name

下面附上一個(gè)習(xí)題集摧茴,大家可以去上面練習(xí)一下:
sql語(yǔ)句練習(xí)題及答案

MYSQL分頁(yè)查詢優(yōu)化

從性能最差的開(kāi)始:

select * from table_name ordered by id limit 1000,10;

但是到百萬(wàn)級(jí)數(shù)據(jù)時(shí)會(huì)變得很慢

優(yōu)化一點(diǎn)的語(yǔ)句:
SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;

因?yàn)閕d直接定位到1000000位置開(kāi)始绵载,而不用全表掃描過(guò)去。

下面這句可能更好一些:
SELECT * FROM table WHERE id BETWEEN 1000000 AND 1000010;

估計(jì)是因?yàn)闆](méi)有用子查詢,不會(huì)將結(jié)果存放在臨時(shí)表中再執(zhí)行第二步操作娃豹。between直接一步定位到1000000位置焚虱。

若查詢id并不連續(xù),使用IN的
SELECT * FROM table WHERE id IN(10000, 100000, 1000000...);

參考鏈接:
mysql視圖的作用(詳細(xì))
SQL經(jīng)典面試題及答案
MySQL 百萬(wàn)級(jí)分頁(yè)優(yōu)化(Mysql千萬(wàn)級(jí)快速分頁(yè))

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末懂版,一起剝皮案震驚了整個(gè)濱河市鹃栽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躯畴,老刑警劉巖民鼓,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蓬抄,居然都是意外死亡丰嘉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門嚷缭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饮亏,“玉大人,你說(shuō)我怎么就攤上這事阅爽÷沸遥” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵付翁,是天一觀的道長(zhǎng)简肴。 經(jīng)常有香客問(wèn)我,道長(zhǎng)胆敞,這世上最難降的妖魔是什么着帽? 我笑而不...
    開(kāi)封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮移层,結(jié)果婚禮上仍翰,老公的妹妹穿的比我還像新娘。我一直安慰自己观话,他們只是感情好予借,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著频蛔,像睡著了一般灵迫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晦溪,一...
    開(kāi)封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天瀑粥,我揣著相機(jī)與錄音,去河邊找鬼三圆。 笑死狞换,一個(gè)胖子當(dāng)著我的面吹牛避咆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播修噪,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼查库,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了黄琼?” 一聲冷哼從身側(cè)響起樊销,我...
    開(kāi)封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎脏款,沒(méi)想到半個(gè)月后围苫,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撤师,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年们童,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了政勃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片背稼。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宫纬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出万俗,到底是詐尸還是另有隱情湾笛,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布闰歪,位于F島的核電站嚎研,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏库倘。R本人自食惡果不足惜临扮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望教翩。 院中可真熱鬧杆勇,春花似錦、人聲如沸饱亿。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)彪笼。三九已至钻注,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間配猫,已是汗流浹背幅恋。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泵肄,地道東北人捆交。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓识埋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親零渐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 50個(gè)常用的sql語(yǔ)句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,235評(píng)論 0 7
  • 什么是SQL數(shù)據(jù)庫(kù): SQL是Structured Query Language(結(jié)構(gòu)化查詢語(yǔ)言)的縮寫系忙。SQL是...
    西貝巴巴閱讀 1,822評(píng)論 0 10
  • 50個(gè)常用的sql語(yǔ)句 Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cna...
    最美的太陽(yáng)WW閱讀 3,199評(píng)論 0 23
  • 一诵盼、基礎(chǔ) 1、創(chuàng)建數(shù)據(jù)庫(kù)(create) CREATE DATABASE database-namecreate ...
    YBshone閱讀 643評(píng)論 0 1
  • 古城的霧霾嚴(yán)重银还,也結(jié)束了漫長(zhǎng)的檢查等待期风宁。早晨起床洗漱完畢和表姐告別后,帶上醫(yī)生開(kāi)的藥踏上回家的歸...
    雨花石靜兒閱讀 241評(píng)論 2 0