場景
Mysql中存儲引擎簡介、修改、查詢、選擇:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/140269624
上面介紹Mysql的存儲引擎。
下面介紹索引的分類和使用。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
實現
Mysql中索引的分類
1、普通索引和唯一索引
普通索引:MySQL 中的基本索引類型,允許在定義索引的列中插入重復值和空值。
唯一索引::索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一 。
主鍵索引是一種特殊的唯一索引,不允許有空值。
2、單列索引和組合索引
單列索引:即一個索引只包含單個列,一個表可以有多個單列索引。
組合索引:在表的多個字段組合上創建的索引,只有在查詢條件中使用了這些字段的左邊字段時索引才會被使用。
使用組合索引遵循最左前綴集合。
3、全文索引
全文索引類型為FULLTEXT,在定義索引的列上支持值的全文查找,允許在這些索引列中插入重復值和空值。
全文索引可以在 CHAR VARCHAR 或者 TEXT 類型的列上創建。在 MySQL中只有MyISAM存儲引擎支持全文索引。
4、空間索引
空間索是對空間數據類型的字段建立的索引,MySQL 中的空間數據類型有4種,分別是GEOMETRY POINT LINSTRNG POLYGON。
MySQL 使用 SPATIAL關鍵字進行擴展,使得能夠用與創建正規索引類似的語法創建空間索引。
創建空間索引的列必須將其聲明為NOT NULL,空間索引只能在存儲引擎為MyISAM的表中創建。
Mysql中創建和查看索引
Mysql在創建表時創建索引
在使用 CREATE TABLE 創建表時 除了可以定義列的數據類型以外,還可以定義主鍵約束、外鍵約束或者唯一性約束,
而不論創建哪種約束 在定義約束時相當于在指定列上創建了一個索引。
創建和查看普通索引
CREATE TABLE fruit (
id INT NOT
NULL,
NAME VARCHAR ( 50 ) NOT NULL,
price DECIMAL ( 8, 2 ) NOT NULL,
city VARCHAR ( 100 ) NOT NULL,
INDEX ( city )
);
該語句執行完畢之后,使用SHOW CREATE TABLE查看表結構。
SHOW CREATE TABLE fruit;
插入兩條測試數據
INSERT INTO fruit VALUES(1,'蘋果',5.20,'北京');
INSERT INTO fruit VALUES(2,'香蕉',2.20,'上海');
EXPLAIN SELECT * FROM fruit WHERE city = '北京';
輸出結果
1 SIMPLE fruit ref city city 302 const 1 100.00
可以看到,possible_keys key的值都為city,在查詢時使用了索引。
Mysql如何在已經建立的表上建立索引
方法1:
使用alter table語句 后面是索引名(字段名)
ALTER TABLE fruit add index city(city);
方法2:
使用create index 語句 前面是索引名,后面是字段名
CREATE INDEX city on fruit(city)
Mysql中創建和查看唯一索引
上面新建的是普通索引,唯一索引與前面的普通索引類似,不同的是索引列的值必須唯一,但允許有空值。
如果是組合索引,則列值的組合必須唯一。
CREATE UNIQUE INDEX id_index ON fruit(id);
Mysql中創建和查看多列索引
組合索引是在多個字段上創建一個索引。
CREATE INDEX group_index on fruit(id,name,price);
可以驗證如果查詢時包含了id則使用了索引,否則不使用索引
EXPLAIN SELECT * FROM fruit WHERE id='1' AND city = '北京';
EXPLAIN SELECT * FROM fruit WHERE name='蘋果' AND city = '北京';
Mysql中創建和查看全文索引
全文索引可以用于全文搜索。只有 MyISAM 存儲引擎支持全文索引 ,從MySQL 5.6開始InnoDB也支持全文索引。
并且只為 CHAR VARCHAR TEXT列。全文索引只能添加到整個字段上,不支持局部(前綴)索引。
CREATE FULLTEXT INDEX ft_index ON fruit(name);
全文索引非常適合大型數據集,對于小的數據集, 它的用處可能比較小。
關于存儲引擎,常用sql
-- 查看系統所支持的引擎類型SHOW ENGINES;
-- 查看當前默認的存儲引擎
SELECT @@default_storage_engine;
-- 查看特定庫中所有表的存儲引擎
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ry-vue-studydemo';
-- 查看單個表的存儲引擎
SHOW TABLE STATUS LIKE 'fruit';
-- 更改表的存儲引擎
ALTER TABLE fruit ENGINE=MyISAM;
ALTER TABLE fruit ENGINE=InnoDB;
Mysql中刪除索引
1、使用DROP INDEX 刪除索引
DROP INDEX city ON fruit;
2、使用ALTER TABLE 刪除索引
ALTER TABLE fruit DROP INDEX ft_index;
浙公網安備 33010602011771號