mysql梳理了一些常識,先記錄

2021-08-09 14:06:44 字數 1294 閱讀 5865

1. 查詢快取(相同的查詢執行多次的時候,查詢結果會被快取)

// 查詢快取不開啟 

$r = mysql_query("select username from user where signup_date >= curdate()"); 

// 開啟查詢快取 

$today = date("y-m-d"); 

$r = mysql_query("select username from user where signup_date >= '$today'"); 

2. 明知只會有一條結果時,使用limit 1, 查詢會提前終止

3. 使用索引(後面細說)

4. 避免select * (後面解釋)

5. 設定乙個唯一id,即使你可能不用

6. 根據情況是用""與null, 然後大部分情況請保持欄位not null

7. 游標的使用

8. 小的,固定的自然就快(垂直劃分,使用int,避免varchar,text等)

9. delete,insert量大需要拆分,避免長時間鎖表

while 1:

effect_row = db.execute(delete from act where f_date < '2009' limit 1000)

if effect_row == 0: break

sleep(0.001)

10. 如果可以,用 group by 代替 distinct

mysql查詢優化器:

1. 最主要的:盡可能的使用索引,並且利用索引排除盡可能多的行

2. 其次匹配資料行

explain詳解:

id: 值越大,優先順序越高

select_type:

******: 簡單select 無子查詢, 無union

primary: 

union:

dependent union:

subquery

dependent subquery:

derived: 

where category_id = 1 and comments > 1 order by views desc

聯合索引:alter table `article` add index x ( `category_id` , `comments`, `views` );

views 的排序會利用不到順序,因為comments是乙個範圍(range), 辦法: comments不加聯合索引即可

b+tree解釋索引順序問題(最左字首原理與相關優化)

單一索引與聯合索引區別

ANSI C一些常識記錄

switch 的 fall through 如果case語句後面不叫break,就一次執行下去,以滿足某些特殊的情況的要求。switch 內部的任何語句都可以加上標籤。這個特性一般不適用,會破壞程式的結構化。switch 的default不一定放在末尾,放在末尾是習慣問題。當default在中間的時...

mysql一些記錄

1 mysql varchar 50 到底能存多少個漢字 mysql 4.0版本以下,varchar 50 指的是50位元組,如果存放utf8漢字時,只能存放16個 每個漢字3位元組 mysql 5.0版本以上,varchar 50 指的是50字元,無論存放的是數字 字母還是utf8漢字 每個漢字3...

mysql的一些基本常識

1.主鍵的選取 主鍵的字段不能有null存在 主鍵應該使用bigint自增,而不是int 主鍵的選取預設為id 聯合主鍵 就是多個欄位被設定為主鍵,這裡主鍵欄位的值是允許相同的,只要不是所有字段相同即可 聯合主鍵不常用,它給關係表帶來了複雜度的提公升 我至今沒用過,好菜 一些簡單常用的操作 資料庫的...