当前位置: 首页
mysql索引的两种存储类型详细说明hash与Btree2020-01-30 18:03:22.0所有MySQL列类型可以被索引。根据存储引擎定义每个表的最大索引数和最大索引长度。 索引的存储类型目前只有两种(btree和hash),具体和存储引擎模式相关: 默认情况MEMORY/Heap存储引擎使用hash索引
虽然 hash 索引效率高,但是 hash 索引本身由于其特殊性也带来了很多限制和弊端,主要有以下这些。 (2)hash 索引无法被用来避免数据的排序操作。 (3)hash 索引不能利用部分索引键查询。 (4)hash 索引在任何时候都不能避免表扫描。 (5)hash 索引遇到大量hash值相等的情况后性能并不一定就会比B-Tree索引高。
CREATE TABLE mytable( city VARCHAR(16), age INT /* -- 修改表结构来创建索引 -- 创建表的时候直接指定 id INT, username VARCHAR(16), city VARCHAR(16), age INT, INDEX indexName (username(10))-- INDEX indexName (username(10),city(10)) ); /* id INT, username VARCHAR(16), city VARCHAR(16), age INT, UNIQUE INDEX indexName (username(10)) -- 也可简写成 UNIQUE indexName (username(10)) );
id INT, username VARCHAR(16), city VARCHAR(16), age INT, PRIMARY KEY(id) ); /* id INT, username VARCHAR(16), city VARCHAR(16), age INT, FULLTEXT INDEX indexName (username(10)) -- 也可简写成 FULLTEXT indexName (username(10)) )ENGINE=MYISAM;
对where后边条件为字符串的一定要加引号,字符串如果为数字mysql会自动转为字符串,但是不使用索引。 username,city,age建立这三列的组合索引,其实是相当于分别建立了下面三组组合索引: username,city,age username,city username 使用组合索引,比如where等条件,列名必须从组合索引最左列至右连续的列名做条件才可以,组合索引类似单一索引前缀 */
-- 全文索引的使用 MATCH...AGAINST可以跟所有MySQL语法搭配使用,像是JOIN或是加上其他过滤条件。 对于表中的每行记录,MATCH...AGAINST 返回一个相关性值。即,返回的每行与搜索条件之间的相似性尺度。 当 MATCH() 被使用在一个 WHERE 子句中时,返回的结果被自动地以相关性从高到底的次序排序。如果即没有 WHERE 也没有 ORDER BY 子句,返回行是不排序的。 到 4.0.1 时,MySQL 也可以使用 IN BOOLEAN MODE 修饰语来执行一个逻辑全文搜索。 逻辑全文搜索支持下面的操作符: 这里是一些示例,在返回结果中: MATCH() 列必须确切地匹配表的某一 FULLTEXT 索引中定义的列,除非 MATCH() 是 IN BOOLEAN MODE 的。 AGAINST() 的参数必须是一个常量字符串。
MySQL全文搜寻设定: ft_boolean_syntax + -><()~*:""&| ft_min_word_len:最短的索引字符串,默认值为4,修改后必须重建索引文件。 中文全文索引可以建两个表,一个表字段里存中文,一个表对应字段存汉语拼音,两表行必须对应,数据一致,插入时中文转化下汉语拼音,两表都插入
查看索引使用情况 语法:SHOW STATUS LIKE 'Handler_read%';
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。 |