面試寶典系列-mysql面試基礎題

一、char、varchar的區別是什麼?面試

varchar是變長而char的長度是固定的。若是你的內容是固定大小的,char的性能會更好。sql

二、tinyint、smallint、int、bigint,float、double佔用字節數?性能

tinyint:1個字節   smallint:2個字節,int:4個字節,bigint:8個字節.net

float:4個字節,double:8個字節code

三、varchar(50)和varchar(100)的區別blog

varchar(50)最多存儲50個字節,varchar(100)最多存儲100個字節,存儲hello字符串所佔的內存是同樣的,但後者在排序時會消耗更多內存。排序

四、int(20)中20的含義索引

是指顯示字符的長度,不影響內部存儲,只是當定義了ZEROFILL時,前面補多少個 0內存

五、如下語句是否會應用索引:SELECT * FROM users WHERE YEAR(adddate) < 2007;字符串

不會,由於條件中使用運算,就不能使用索引了

六、一個6億的表a,一個3億的表b,經過外鍵tid關聯,你如何最快的查詢出知足條件的第50000到第50200中的這200條數據記錄。

狀況一:若是A表TID是自增加,而且是連續的,B表的ID爲索引

select * from a,b where a.tid = b.id and a.tid>50000 limit 200;

狀況二:若是A表的TID不是連續的,那麼就須要使用覆蓋索引.TID要麼是主鍵,要麼是輔助索引,B表ID也須要有索引。

select * from b , (select tid from a limit 50000,200) a where b.id = a .tid;

八、Student(S,Sname,Sage,Ssex) 學生表 Course(C,Cname,T) 課程表 SC(S,C,score) 成績表 Teacher(T,Tname) 教師表 查詢沒學過「葉平」老師課的同窗的學號、姓名 

SELECT
	Student.S,
	Student.Sname
FROM
	Student
WHERE
	S NOT IN (
		SELECT DISTINCT
			(SC.S)
		FROM
			SC,
			Course,
			Teacher
		WHERE
			SC.C = Course.C
		AND Teacher.T = Course.T
		AND Teacher.Tname = ’葉平’
	);

九、隨機取出10條數據 

SELECT
	*
FROM
	users
WHERE
	id >= (
		(SELECT MAX(id) FROM users) - (SELECT MIN(id) FROM users)
	) * RAND() + (SELECT MIN(id) FROM users)
LIMIT 10

-- 如下寫法確定不得分,效率不高
SELECT * FROM users order by rand() LIMIT 10

更多sql面試題:https://blog.csdn.net/c910118/article/details/78909726

相關文章
相關標籤/搜索