編碼的世界 / 優質文選 / 歷史

mysql 整理(六)索引,更新數據


2022年5月15日
-   

更新數據
UPDATE tablename
SET column1 = value1,column2 = value2 ,。。。。,columnN = valueN
where id = 1;
刪除數據
DELETE FROM tablename  where id=3;
索引
什麼是索引:
一種數據結構,提高數據庫中特定數據的查詢速度。
索引在存儲引擎中實現,每種存儲引擎的索引不一定相同,每種存儲引擎不一定支持所有索引類型。
索引有:BTREE 和HASH 兩種存儲類型。
MyISAM 和InnoDB 存儲引擎值支持BTREE索引,MEMORY/HEAP支持HASH 和BTREE。
索引優點:
創建唯一索引,保證數據唯一性。
大大加快數據查詢速度。
加速表與表之間連接。
顯著減少查詢中分組和排序的時間。
不利:
創建索引耗費時間。
占磁盤空間。
數據增刪改的時候索引要動態維護,降低維護速度。
索引設計原則:
一、並非越多越好,占空間影響增刪改表數據的性能。
二、避免添加不必要字段。
三、數據量小的表不要用索引,查詢時間比創建索引還短。
四、在不同的值很少的列上不要建立索引比如性別只有男和女,會嚴重降低數據更新速度。
五、當唯一性是某個數據列的特點,就建立唯一索引可以提高數據查詢速度。
六、在頻繁分組和排序的列上建立索引,如果待排序的列有多個就建立組合索引。
索引分類:
普通索引和唯一索引
普通索引是基本索引類型勻速插入重複和空值。
唯一索引必須唯一,允許空值,如果是組合索引列值必須唯一,主鍵索引是特殊唯一索引不允許空值。
單列索引和組合索引
單列索引就是只包含單個列,一個表可以有多個單列索引。
組合索引在標的多個字段組合上創建索引,只有在查詢條件中使用這些字段的左邊字段,索引才會被使用,組合索引遵守最左前綴
索引創建
普通索引
最基本的索引沒有限制,只是加快數據訪問速度
CREATE TABLE book
(
id     INT(11)  AUTO_INCREMENT,
date DATE NOT NULL,
INDEX(date)
);
使用explain 查詢索引是否啟用
explain  select *from  book   date = "19993366778899" G
參數:
possible_keys代表可選用索引數
key行是mysql實際選用索引數
key_len行給樹索引按字節計算的長度越小越快。
創建唯一索引
UNIQUE INDEX UniqIdx(id)
單列索引
INDEX SingleIdx(name(20))
名為SingleIdx單列索引索引長度為20
組合索引
INDEX MultiIdx(idname,age(1000))
遵守最左前綴,查詢可以用 (id,name,age),(id,name)或者id不構成最左前綴就不會啟動索引。
全文搜索:
FULLTEXT INDEX FullTxtIdx(info)
空間索引
SPATIAL INDEX spatIdx(g)
在已存在表創建索引
ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY]  [index_name] (col_name[lenght],.) [ASC|DESC]
也可以使用CREATE INDEX 命令
SHOW INDEX FROM book  G查看表的索引情況
參數
Non_unique 等於1 代表非唯一索引 0代表唯一索引
key_name代表索引名
Seq_in_index表示該字段在索引的位置 單列為1
Column_name 表示定義索引的列字段
Sub_part表示索引的長度。
NULL表示是否可以為空
Index_type 表示索引類型。
刪除索引
ALTER TABLE table_name DROP INDEX  index_name;

熱門文章