Mysql建表與索引使用規範整理

2021-07-04 03:33:46 字數 3031 閱讀 2516

一,設計表規範:

1. mysql建表,欄位需設定為非空,需設定字段預設值。

2. mysql建表,欄位需null時,需設定字段預設值,預設值不為null。

3. mysql建表,如果字段等價於外來鍵,應在該字段加索引。

4. mysql建表,不同表之間的相同屬性值的字段,列型別,型別長度,是否非空,是否預設值,需保持一致,否則無法正確使用索引進行關聯對比。

5. mysql使用時,一條sql語句只能使用乙個表的乙個索引。所有的字段型別都可以索引,多列索引的屬性最多15個。

6. 如果可以在多個索引中進行選擇,mysql通常使用找到最少行的索引,索引唯一值最高的索引。

7. 建立索引index(part1,part2,part3),相當於建立了 index(part1),index(part1,part2)和index(part1,part2,part3)三個索引。

8. mysql針對like語法必須如下格式才使用索引:

select * from t1 where key_col like 『ab%』 ;

9. select count(*) 語法在沒有where條件的語句中執行效率沒有select count(col_name)快,但是在有where條件的語句中執行效率要快。

10. 在where條件中多個and的條件中,必須都是乙個多列索引的key_part屬性而且必須包含key_part1。各自單一索引的話,只使用遍歷最少行的那個索引。

11. 在where條件中多個or的條件中,每乙個條件,都必須是乙個有效索引。

12. order by 後面的條件必須是同一索引的屬性,排序順序必須一致(比如都是公升序或都是降序)。

13. 所有group by列引用同一索引的屬性,並且索引必須是按順序儲存其關鍵字的。

14.、 join 索引,所有匹配on和where的字段應建立合適的索引。

15. 對智慧型的掃瞄全表使用force index告知mysql,使用索引效率更高。

16. 定期analyze table tbl_name為掃瞄的表更新關鍵字分布 。

17. 定期使用慢日誌檢查語句,執行explain,分析可能改進的索引。

18. 條件允許的話,設定較大的key_buffer_size和query_cache_size的值(全域性引數),和sort_buffer_size的值(session變數,建議不要超過4m)。

二,命名規範 :

1.主鍵的命名採用如下規則:

主鍵名用pk_開頭,後面跟該主鍵所在的表名。主鍵名長度不能超過30個字元。如果過長,可對錶名進行縮寫。縮寫規則同表名的縮寫規則。主鍵名用小寫的英文單詞來表示。

2.外來鍵的命名採用如下規則:

外鍵名用fk_開頭,後面跟該外來鍵所在的表名和對應的主表名(不含t_)。子表名和父表名自己用下劃線(_)分隔。外鍵名長度不能超過30個字元。如果過長,可對錶名進行縮寫。縮寫規則同表名的縮寫規則。外鍵名用小寫的英文單詞來表示。

3.索引的命名採用如下規則:

1)索引名用小寫的英文本母和數字表示。索引名的長度不能超過30個字元。

2)主鍵對應的索引和主鍵同名。

3)唯一性索引用uni_開頭,後面跟表名。一般性索引用ind_開頭,後面跟表名。

4)如果索引長度過長,可對錶名進行縮寫。縮寫規則同表名的縮寫規則

5)索引基本語法

create index 索引名稱 on 表名(字段);

show index from 表名 ;

drop index 索引名稱 on 表名;

6)唯一值越多的字段,使用索引的效果越好。設定聯合索引時,唯一值越多的,越應該放在「左側」。

三,sql語句優化規範 :

1. 使用mysqlexplain 對sql執行效率進行檢測 ,explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

1) 使用方法:在select語句前加上explain即可

2) explain 分析結果形式如下:

table | type | possible_keys | key | key_len | ref | rows | extra

explain 分析結果形式中各屬性含義:

table :顯示這一行的資料是關於哪張表的

type :這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、indexhe和all

possible_keys :顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句

key :實際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優化不足的索引。這種情況下,可以在select語句中使用use index(indexname)來強制使用乙個索引或者用ignore index(indexname)來強制mysql忽略索引

key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好

ref:顯示索引的哪一列被使用了,如果可能的話,是乙個常數

rows:mysql認為必須檢查的用來返回請求資料的行數

extra  :返回的描述的意義

2. 盡量使用"inner join " 查詢替換子查詢條件中的 "in " ,防止由於資料量過大,引發資料庫掛起問題

3.使用索引應注意問題:

1)查詢語句的

where

條件後邊使用

「!=」

或「<>」

時,索引不生效,和普通字段一樣

2)查詢語句的

where

條件後邊使用字串函式或其他函式,索引不生效,和普通字段一樣

3)使用連線

(join)

查詢時,只有在主鍵和外來鍵的資料型別相同時索引才會生效

4)查詢語句的

where

條件後邊使用

like

關鍵字應注意,

like '%jx%'

和like '%jx'

方式索引均不生效,

like 'jx%'

方式索引生效

5)innodb

資料表不支援全文索引

Mysql建表與索引使用規範詳解

一 mysql建表,欄位需設定為非空,需設定字段預設值。二 mysql建表,欄位需null時,需設定字段預設值,預設值不為null。三 mysql建表,如果字段等價於外來鍵,應在該字段加索引。四 mysql建表,不同表之間的相同屬性值的字段,列型別,型別長度,是否非空,是否預設值,需保持一致,否則無...

Mysql建表與索引使用規範整理

一,設計表規範 1.mysql建表,欄位需設定為非空,需設定字段預設值。2.mysql建表,欄位需null時,需設定字段預設值,預設值不為null。3.mysql建表,如果字段等價於外來鍵,應在該字段加索引。4.mysql建表,不同表之間的相同屬性值的字段,列型別,型別長度,是否非空,是否預設值,需...

Mysql建表和索引使用規範

mysql建表和索引使用規範 tt lan2003 一 mysql建表,欄位需設定為非空,需設定字段預設值。二 mysql建表,欄位需null時,需設定字段預設值,預設值不為null。三 mysql建表,如果字段等價於外來鍵,應在該字段加索引。四 mysql建表,不同表之間的相同屬性值的字段,列型別...