在MySQL中,索引是一个排序的列表,在这个索引中存在这个索引的值和这个索引所在行的物理地址,使用索引可以加快查询速度是因为,使用索引后可以不用扫描全表来定位某行的位置,而是通过索引列表直接跳转到该行的物理地址访问相关的数据。
CREATE TABLE table( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexname] (username(length)) );
ALERT TABLE table ADD [UNIQUE] INDEX index_name(column_name);
CREATE INDEX index_name ON table(column_name);
在建立索引的时候需要占用磁盘空间,而且需要对表加锁。
具体查询: SELECT * FROM table_name WHERE column_1=column_2;(为column_1建立了索引) 或者模糊查询 SELECT * FROM table_name WHERE column_1 LIKE ‘%三‘ SELECT * FROM table_name WHERE column_1 LIKE ‘三%‘ SELECT * FROM table_name WHERE column_1 LIKE ‘%三%‘ SELECT * FROM table_name WHERE column_1 LIKE ‘_好_‘ 如果要表示在字符串中既有A又有B,那么查询语句为: SELECT * FROM table_name WHERE column_1 LIKE ‘%A%‘ AND column_1 LIKE ‘%B%‘; SELECT * FROM table_name WHERE column_1 LIKE ‘[张李王]三‘; //表示column_1中有匹配张三、李三、王三的都可以 SELECT * FROM table_name WHERE column_1 LIKE ‘[^张李王]三‘; //表示column_1中有匹配除了张三、李三、王三的其他三都可以 //在模糊查询中,%表示任意0个或多个字符;_表示任意单个字符(有且仅有),通常用来限制字符串长度;[]表示其中的某一个字符;[^]表示除了其中的字符的所有字符 或者在全文索引中模糊查询 SELECT * FROM table_name WHERE MATCH(content) AGAINST(‘word1‘,‘word2‘,...);
DROP INDEX index ON table;
ALERT TABLE table DROP INDEX index;
ALERT TABLE table ADD PRIMARY KEY pk_index(‘col‘);
ALERT TABLE table ADD UNIQUE pk_index(‘col‘);
ALERT TABLE table ADD INDEX pk_index(‘col‘);
ALTER TABLE ‘table_name‘ ADD INDEX index_name(‘col1‘,‘col2‘,‘col3‘);
ALTER TABLE ‘table_name‘ ADD INDEX index_name(col1(4),col2(3));
//创建表的时候添加FULLTEXT索引 CTREATE TABLE my_table( id INT(10) PRIMARY KEY, name VARCHAR(10) NOT NULL, my_text TEXT, FULLTEXT(my_text) )ENGINE=MyISAM DEFAULT CHARSET=utf8; //创建表以后,在需要的时候添加FULLTEXT索引 ALTER TABLE my_table ADD FULLTEXT INDEX ft_index(column_name); 全文索引的查询也有自己特殊的语法,而不能使用LIKE %查询字符串%的模糊查询语法 SELECT * FROM table_name MATCH(ft_index) AGAINST(‘查询字符串‘);
注意:
*对于较大的数据集,把数据添加到一个没有FULLTEXT索引的表,然后添加FULLTEXT索引的速度比把数据添加到一个已经有FULLTEXT索引的表快。
*5.6版本前的MySQL自带的全文索引只能用于MyISAM存储引擎,如果是其它数据引擎,那么全文索引不会生效。5.6版本之后InnoDB存储引擎开始支持全文索引
*在MySQL中,全文索引支队英文有用,目前对中文还不支持。5.7版本之后通过使用ngram插件开始支持中文。
*在MySQL中,如果检索的字符串太短则无法检索得到预期的结果,检索的字符串长度至少为4字节,此外,如果检索的字符包括停止词,那么停止词会被忽略。
原文链接:https://blog.csdn.net/tongdanping/article/details/79878302
原文:https://www.cnblogs.com/shemlo/p/11612754.html