MySQL索引的分类、何时使用、何时不使用、何时失效?

MySQL 索引的分类、使用场景、不使用场景以及失效情况 1 . 索引的分类 MySQL 索引主要分为以下几类: 常规索引:最基本的索引类型,没有唯一性限制。
唯一索引:索引列值必须唯一(允许为空)。
创建方法:createuniqueindexindex_nameontable(column); -- 或 createtable(...,uniqueindex_name(column));创建表时。
主键索引:一种特殊的唯一索引。
不能为空,只能有一个。
通常在创建表时指定: createtable(...,primarykey(column)); 联合索引:遵循最左前缀原则在多个字段上创建的索引。
如何创建:altertabletaddindexindex_name(a,b,c);全文索引:用于文本搜索,支持char、varchar、text类型。
创建方法: -- 创建全文索引 createfulltextindexindex_nameontable(column); -- 如果使用 select*fromtablewherematch(column)against('keyword'); 之间的匹配2 . 何时使用索引: 以下场景适合使用索引: 主键和唯一字段:在主键和唯一约束字段上自动创建索引,以加快数据检索速度。
表连接字段:与其他表相关的字段(例如外键)应该建立索引,以提高连接效率。
查询条件字段:WHERE子句中使用>、≥、=、<、≤、ISNULL、BETWEEN等条件的字段。
模糊查询优化:使用LIKE时,索引以通配符开头(如LIKE'China%')可以使用,但不能使用LIKE'%China'。
聚合函数字段:由 MIN() 或 MAX() 等聚合函数操作的字段。
排序和分组字段:与 ORDERBY 和 GROUPBY 相关的字段。
3 . 何时不使用索引 以下情况不建议使用索引: 如果表记录太少:对数据量较小的表进行全表扫描可能比使用索引更快。
数据分布均匀的选择性较少的字段:例如性别字段(只有两个值:“男性”和“女性”),索引的作用有限。
频繁更新的表:索引会减慢插入、删除和更新操作,必须考虑读/写比率。
大文本字段:TEXT、IMAGE 和其他类型的字段不适合索引,除非对前 N 个字符进行索引。
当全表扫描更好时:当MySQL优化器确定全表扫描比使用索引更快时(例如,在数据分布的特殊情况下)。
4 . 索引失败条件 在以下条件下索引将失败。
连接索引不遵循最左前缀原则。
查询条件WHEREB=b,如连接索引(A,B)不能使用索引。
LIKE 查询不使用最左边的前缀。
例如,WHEREALIKE'%China' 不能使用索引。
交叉索引排序:如果WHEREA=aORDERBYB,则仅使用A的索引。
OR 条件使用不当:同一字段的 OR 条件中可以使用索引(例如 WHEREA=a1 ORA=a2 )。
不同字段上的 OR 条件通常会失败(例如,WHEREA=aORB=b)。
类型转换:不带引号的字符串字段(例如 WHEREA=China 而不是 WHEREA='China')会导致索引错误。
对索引列的操作:对索引列的函数(例如 UPPER(A))、!= (<>)、NOTIN 和其他操作使索引无效。
5 、索引使用分析工具 是否可以分析使用子句 EXPLAIN 索引使用: type Field: ALL:全表绘制(未使用索引) index:索引所有绘制 range:索引绘制(<、<=、>=、BETWEEN 等) ref:非唯一索引绘制 eq_ref:仅索引绘制 const/system:主键还是仅索引绘制 null:未使用表或索引键字段 示例: EXPLAINSELECT*FROMusersWHEREage>2 5 ORDERBYname;索引可以显着提高 MySQL 性能,但它们必须根据您的数据和分布模式进行扩展。

mysql使用全文索引实现大字段的模糊查询

场景描述:在Centos7 环境下,使用mysql5 .7 InnoDB引擎创建名为“tbl_article_content”的表。
表结构包含字段“id”、“content”、“article_id”、“create_by”和“modifield_by”,并为“content”字段创建全文索引“content_word”。
为什么使用索引:由于需要进行全面搜索,需要用户输入关键字来显示包含该关键字的文章(标题、介绍、内容)。
由于文章内容字段“Content”存储的文本量较大,为了提高查询效率,我们选择使用全文索引(full-text)。
创建索引:使用ngram解析器在表“tbl_article_content”的“Content”字段上创建名为“content_word”的全文索引。
MySQL配置:MySQL默认不启用和配置ngram,因此必须在建立索引后配置MySQL。
打开mysql配置文件,在[mysqld]下添加`ft_min_word_len=1 `和`ngram_token_size=1 `,然后重新启动MySQL。
进入MySQL后,修复之前创建的索引。
查询语句:使用`SELECTarticle_idFROMtbl_article_contentWHEREMATCH(content)AGAINST('no more');`进行模糊查询。
总结一下问题:从MySQL 5 .7 开始,MySQL内置了ngram全文搜索插件,支持中文分词,对于MyISAM和InnoDB引擎有效。
使用时注意版本号和配置。
相关命令:使用`SHOWCREATETABLEtbl_article_content;`查询当前表信息,使用`SHOWVARIABLESLIKE'%ngram%';`查询ngram引擎配置信息。

【MySQL】全文索引(FULLTEXT)的使用

全文索引与通用索引不同。
在搜索效率方面;全文索引相比普通模糊查询(LIKE)可以提高N倍。
这是MySQL专门为搜索引擎提供的功能。
MySQL 5 .6 之前的版本;只有MyISAM存储引擎支持全文索引。
不过,从5 .6 版本开始,InnoDB和MyISAM都支持全文索引。
另外,Field 类型有 char、varchar 只有存在文本及其变体时才能创建全文标签。
MySQL 5 .6 及以后版本是中文的,引入了能够解析日文和韩文字符的ngram解析器。
如果你不使用 ngram 解析器。
MySQL 通常会使用空格和符号作为分隔符。
对于英语来说已经足够了,但是对于中文来说就够了。
不适用于日语和韩语文本。
因此,需要一个ngram解析器。
开始使用全文索引的步骤如下: 1 - 创建索引 您可以使用可视化工具轻松创建索引。
2 :查询语句的全文索引包含特定的查询语法:(关键字)和匹配(字段) 3 :为了提高搜索效果;通常需要设置最小搜索长度。
全文索引对应的参数不能动态修改;这必须通过修改MySQL配置文件来实现。
通常,将最小搜索长度值设置为2 首先,打开MySQL配置文件(MySQL8 .0的配置文件为:my.ini),在[mysqld]部分下添加以下内容: 检查该变量的语法: 修改参数后,重新启动MySQL服务器。
在这个例子中,我使用了直接的方法——重新启动计算机。
然后删除原来的标签并重新创建。
修复参数后,必须重新启动计算机(或重新启动MySQL)并重新创建(或修复)索引;请注意,否则限制将不会生效。
全文索引支持三种搜索模式: 1 - 自然语言模式(INNATURALLANGUAGEMODE,默认模式) 2 - 布尔搜索模式(INBOOLEANMODE) 3 - 查询扩展搜索 查询扩展搜索很少深入到具体细节。