一、查询
1、子查询
ANY(SOME) ,ALL ,IN ,EXISTS
1.1 ANY 接在比较操作符后面,表示若与子查询返回的值比较为true,返回true。
1.2 ALL 接在比较操作符后面,需要同时满足子查询返回的结果。
1.3 EXISTS 子查询至少返回一行时,运行结果为true。
EXISTS可以在 WHERE后使用。
2、正则表达式查询
SELECT * FROM table_name WHERE table_col REGEXP '表达式'
二、索引
可以加速表之间的连接,减少分组和排序的时间。
有大量索引时,索引文件可能比数据文件更快的达到最大文件尺寸,数据进行增删改时,索引也要动态维护。
1、分类
1.1 普通索引:基本索引类型,允许重复值和空值
唯一索引:允许有空值。 主键索引是特殊的唯一索引,不允许空值
1.2 单列索引和组合索引 :组合索引遵循最左前缀
1.3 全文索引:支持CHAR, VARCHAR, TEXT类型,只有MyISAM支持。
1.4 空间索引
2、创建索引
1.1 建表时创建
a 普通索引:CREATE TABLE table_name(... ,INDEX(table_col));
b 唯一索引:CREATE TABLE table_name(... ,UNIQUE INDEX 索引名(table_col));
c 组合索引:CREATE TABLE table_name(... ,INDEX 索引名(table_col, table_col2,..));
d 全文索引:CREATE TABLE table_name(... ,FULLTEXT INDEX 索引名(table_col)) ENGINE=MyISAM;
1.2 修改表结构(ALTER TABLE)
ALTER TABLE table_name ADD [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] [index_name] (table_col[length],...) [ASC|DESC]
例:ALTER TABLE user ADD UNIQUE INDEX username(user_name);
1.3 单独创建(CTEATE INDEX)
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON table_name (table_col[length],...) [ASC|DESC]
例: CRTEAT UNIQUE INDEX username ON user (user_name);
3、查看索引
1.1 查看索引定义:SHOW INDEX FROM table_name;
1.2 查看索引使用:EXPLAIN关键字查看语句执行情况,执行结果中possible_keys表示可用的索引,key表示实际使用的索引,key_len表示索引的长度,rows表示预计从数据库读出的数据行的个数。
4、删除索引
1.1 修改表结构 ALTER TABLE table_name DROP INDEX index_name;
1.2 单独删除 DROP INDEX index_name ON table_name;