1. 程式人生 > 其它 >常用Mysql操作總結

常用Mysql操作總結

一、索引

1、查看錶索引

  show keys from test_table

2、刪除索引或唯一約束UNIQUE KEY

  drop index crisis_id on test_table;

3、新增索引   ALTER TABLE test_table ADD INDEX i_sku_key (sku_id,supplier_id);   alter table test_tableadd unique key(id,beginmon,leftmon,area_category_id,area_code,mmc_category_id,mmc_code) 4、開啟關閉索引   關閉:ALTER TABLE `test` DISABLE KEYS ;   開啟:ALTER TABLE `test` ENABLE KEYS; 二、表結構修改 1、新增欄位     alter table etl_mcbi_gbusiness_line_class_order_daily   add `dx_rate` decimal(30,6) COMMENT '動銷率今日值',   add `dx_rate_wac` decimal(30,6) COMMENT '動銷率周累計',   add `dx_rate_mac` decimal(30,6) COMMENT '動銷率月累計'; 2、修改欄位not null改為null   ALTER TABLE test_property MODIFY name int(10) unsigned DEFAULT '0' COMMENT '測試欄位'; 三、Sql分析 1、sql分析   explain select * from app_bicore_pb_order_daily where dt=20190709      id:這是SELECT的查詢序列號   select_type:select_type就是select的型別,可以有以下幾種:     SIMPLE:簡單SELECT(不使用UNION或子查詢等)     PRIMARY:最外面的SELECT     UNION:UNION中的第二個或後面的SELECT語句     DEPENDENT UNION:UNION中的第二個或後面的SELECT語句,取決於外面的查詢     UNION RESULT:UNION的結果。     SUBQUERY:子查詢中的第一個SELECT     DEPENDENT SUBQUERY:子查詢中的第一個SELECT,取決於外面的查詢     DERIVED:匯出表的SELECT(FROM子句的子查詢)   table:顯示這一行的資料是關於哪張表的   type:這列最重要,顯示了連線使用了哪種類別,有無使用索引,是使用Explain命令分析效能瓶頸的關鍵項之一。     結果值從好到壞依次是:     system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL     一般來說,得保證查詢至少達到range級別,最好能達到ref,否則就可能會出現效能問題。   possible_keys:列指出MySQL能使用哪個索引在該表中找到行   key:顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL   key_len:顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。使用的索引的長度。在不損失精確性的情況下,長度越短越好   ref:顯示使用哪個列或常數與key一起從表中選擇行。   rows:顯示MySQL認為它執行查詢時必須檢查的行數。   Extra:包含MySQL解決查詢的詳細資訊,也是關鍵參考項之一。   Distinct :一旦MYSQL找到了與行相聯合匹配的行,就不再搜尋了   Not exists:MYSQL 優化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,就不再搜尋了   Range checked for eachRecord(index map:#)     沒有找到理想的索引,因此對於從前面表中來的每一 個行組合,MYSQL檢查使用哪個索引,並用它來從表中返回行。這是使用索引的最慢的連線之一   Using filesort     看到這個的時候,查詢就需要優化了。MYSQL需要進行額外的步驟來發現如何對返回的行排序。它根據連線型別以及儲存排序鍵值和匹配條件的全部行的行指標來 排序全部行   Using index     列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,這發生在對錶 的全部的請求列都是同一個索引的部分的時候   Using temporary     看到這個的時候,查詢需要優化了。這 裡,MYSQL需要建立一個臨時表來儲存結果,這通常發生在對不同的列集進行ORDER BY上,而不是GROUP BY上   Using where     使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給使用者。如果不想返回表中的全部行,並且連線型別ALL或index, 這就會發生,或者是查詢有問題   其他一些Tip:     當type 顯示為 “index” 時,並且Extra顯示為“Using Index”, 表明使用了覆蓋索引。