MySQL 中的 varchar 和 char 有什么區別?
? char 是一個定長字段,假如申請了char(10)
的空間,那么無論實際存儲多少內容.該字段都占用 10 個字符,而 varchar 是變長的,也就是說申請的只是最大長度,占用的空間為實際字符長度+1,最后一個字符存儲使用了多長的空間.
? 在檢索效率上來講,char > varchar,因此在使用中,如果確定某個字段的值的長度,可以使用 char,否則應該盡量使用 varchar.例如存儲用戶 MD5 加密后的密碼,則應該使用 char。
MySQL中 in 和 exists 區別?
? MySQL中的in語句是把外表和內表作hash 連接,而exists語句是對外表作loop循環,每次loop循環再對內表進行查詢。一直大家都認為exists比in語句的效率要高,這種說法其實是不準確的。這個是要區分環境的。
? 如果查詢的兩個表大小相當,那么用in和exists差別不大。 如果兩個表中一個較小,一個是大表,則子查詢表大的用exists,子查詢表小的用in。 not in 和not exists:如果查詢語句使用了not in,那么內外表都進行全表掃描,沒有用到索引;而not extsts的子查詢依然能用到表上的索引。所以無論那個表大,用not exists都比not in要快。