1、DDL(Data Definition Language)資料庫定義語言
阿新 • • 發佈:2018-11-18
普通索引(INDEX)
語法:ALTER TABLE 表名字 ADD INDEX 索引名字 ( 欄位名字 )
-- –直接建立索引
CREATE INDEX index_user ON user(title)
-- –修改表結構的方式新增索引
ALTER TABLE table_name ADD INDEX index_name ON (column(length))
-- 給 user 表中的 name欄位 新增普通索引(INDEX)
ALTER TABLE `table` ADD INDEX index_name (name)
-- –建立表的時候同時建立索引
CREATE TABLE `table` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
`time` int(10) NULL DEFAULT NULL ,
PRIMARY KEY (`id`),
INDEX index_name (title(length))
)
-- –刪除索引
DROP INDEX index_name ON table
主鍵索引(PRIMARY key)
語法:ALTER TABLE 表名字 ADD PRIMARY KEY (欄位名字)
-- 給 user 表中的 id欄位 新增主鍵索引(PRIMARY key)
ALTER TABLE `user` ADD PRIMARY key (id);
唯一索引(UNIQUE)
語法:ALTER TABLE 表名字 ADD UNIQUE (欄位名字)
-- 給 user 表中的 creattime 欄位新增唯一索引(UNIQUE)
ALTER TABLE `user` ADD UNIQUE (creattime);
全文索引(FULLTEXT)
語法:ALTER TABLE 表名字 ADD FULLTEXT (欄位名字)
-- 給 user 表中的 description 欄位新增全文索引(FULLTEXT)
ALTER TABLE `user` ADD FULLTEXT (description);
新增多列索引
語法:ALTER TABLE table_name ADD INDEX index_name ( column1, column2, column3)
-- 給 user 表中的 name、city、age 欄位新增名字為name_city_age的普通索引(INDEX)
ALTER TABLE user ADD INDEX name_city_age (name(10),city,age);
建立索引的時機
在WHERE和JOIN中出現的列需要建立索引,但也不完全如此:
mysql為例講述下水平拆分和垂直拆分,mysql能容忍的數量級在百萬靜態資料可以到千萬 垂直拆分:解決問題:表與表之間的io競爭 不解決問題:單表中資料量增長出現的壓力 方案: 把產品表和使用者表放到一個server上 訂單表單獨放到一個server上 水平拆分: 解決問題:單表中資料量增長出現的壓力 不解決問題:表與表之間的io爭奪
方案: 使用者表通過性別拆分為男使用者表和女使用者表 訂單表通過已完成和完成中拆分為已完成訂單和未完成訂單 產品表 未完成訂單放一個server上 已完成訂單表盒男使用者表放一個server上 女使用者表放一個server上
- MySQL只對<,<=,=,>,>=,BETWEEN,IN使用索引
- 某些時候的LIKE也會使用索引。
- 在LIKE以萬用字元%和_開頭作查詢時,MySQL不會使用索引
- 索引不會包含有NULL值的列
- 使用短索引
- 不要在列上進行運算 索引會失效