一查找的方式
全文索引查找
TYPE=MyISAM;
FULLTEXT KEY `name` (column1, column2)
# 查找词 "不会吧"
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('不会吧'IN BOOLEAN MODE);
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('不会吧'IN BOOLEAN MODE);
# 查找以词 "不会吧" 开头的任意词句
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('不会吧*' IN BOOLEAN MODE);
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('不会吧*' IN BOOLEAN MODE);
# 查找以词 "不会吧" 开头的任意词句 并 去除词 "真的"
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('+不会吧* -真的' IN BOOLEAN MODE);
mysql> SELECT * FROM t3 WHERE MATCH (name,name2)
-> AGAINST ('+不会吧* -真的' IN BOOLEAN MODE);
正则表达式查找
# 查找词 "不会吧"
mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧";
mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧";
# 查找以词 "不会吧" 开头的
mysql> SELECT * FROM t3 WHERE name2 REGEXP "^不会吧";
mysql> SELECT * FROM t3 WHERE name2 REGEXP "^不会吧";
# 查找以词 "不会吧" 结束的
mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧$";
mysql> SELECT * FROM t3 WHERE name2 REGEXP "不会吧$";
二提高查找的效率—索引
索引的分类:
普通索引
UNIQUE
//唯一性索引,
PRIMARY KEY是这种类型
|FULLTEXT
//全文索引
|SPATIA
//
单列索引与多列索引
建索引的技巧
索引用于下面几种情形:
快速找出匹配一个WHERE子句的行。
当执行联结时,从其他表检索行。
对特定的索引列找出MAX()或MIN()值。
如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
当执行联结时,从其他表检索行。
对特定的索引列找出MAX()或MIN()值。
如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
因此:凡是由where构成的查询语句都必须建索引.
Eg:
mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
建立索引的语法:
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX @var{index_name} [@var{index_type}]
ON @var{tbl_name} (@var{index_col_name},...)
@var{index_col_name}:
@var{col_name} [(@var{length})] [ASC | DESC]
Eg:
CREATE INDEX index_name1 ON tbl_name(col1, col2);
分析索引效率
MySQL
提供了一个内建的
SQL
命令帮助我们完成这个任务,这就是
EXPLAIN
命令。
EXPLAIN
命令的一般语法是:
EXPLAIN <SQL
命令
>
。
其它:
一个表最多可有
16
个索引。最大索引长度是
256
个字节