MySQL索引优化与使用指南:全面解析各类索引及其适用场景
MySQL——关于索引的总结
如果我们不指定,Mysql会自动寻找非空的唯一索引作为主键。
如果没有这个字段,Mysql会创建一个大小为6字节的自增主键。
先说表结构:用户表tb_user的结构如下:不要对索引列进行操作,索引会失效。
空间索引:空间索引是在空间数据类型的字段上建立的索引。
MYSQL中有4种空间数据类型:GEOMETRY、POINT、LINESTRING和POLYGON。
MYSQL已使用SPATIAL关键字进行了扩展,允许使用用于创建常见索引类型的语法来创建空间索引。
索引可以加快数据检索操作的速度,但会使数据修改操作变慢。
每次修改数据记录时,都必须刷新索引。
为了在一定程度上弥补这个缺点,很多SQL命令都有DELAY_KEY_WRITE条目。
综上所述,Mysql中的B树索引有以下主要特点:Mysql中的B树索引有两种数据存储形式,一种是聚集索引,一种是二级索引。
mysql有那些索引?分别在什么场景使用
1.普通索引
这是最基本的索引,没有任何限制。
创建方法有以下几种:
1.创建索引
代码如下:
CREATEINDEXindexNameONmytable(username(Length));
THISISCHAR;如果类型是VARCHAR;如果长度是BLOB和TEXT类型,则长度可能小于字段的实际长度;
2.修改表结构
代码如下:
ALTERmytableADDINDEX[indexName]ON(username(length))--创建时直接设置。
桌子。
CREATETABLEmytable(IDINTNOTNULL,usernameVARCHAR(16)NOTNULL,INDEX[indexName](用户名(长度)));
--删除索引的语法:
DROPINDEX[indexName]ONmytable;
唯一索引
这与之前的普通索引列,除了值之外,索引都是一样的;然而,空值是允许的。
在综合指数中;列值的任何组合都必须是唯一的。
它有以下创建方法:
代码如下:
CREATEUNIQUEINDEXindexNameONmytable(username(length))
--修改表结构
ALTERmytableADDUNIQUE[indexName]ON(username(length))
---创建表时直接设置
CREATEABLEmytable(IDINTNOTNULL,usernameVARCHAR(16)NOTNULL,UNIQUE[indexName](username(length));
主3键索引
这是一个特殊的唯一索引,不允许空值。
一般来说,创建表时会创建主键索引:
代码如下:
CREATEABLEmytable(IDINTNOTNULL,usernameVARCHAR(16)NOTNULL,PRIMARYKEY(ID));
CREATEABLEmytable(IDINTNOTNULL,usernameVARCHAR(16)NOTNULL,PRIMARYKEY(ID));
是的,您还可以使用ALTER命令。
记住:一张表只能有一个主键。
4.复合索引
在表中添加多个字段,可以直观地对比单列索引和复合索引:
代码如下。
:
CREATETABLEmytable(IDINTNOTNULL,usernameVARCHAR(16)NOTNULL,cityVARCHAR(50)NOTNULL,ageINTNOTNULL);
二:使用标签的注意事项
使用标签时;有一些提示和注意事项:
索引不得包含NULL值。
只要该列包含NULL值;它将不会被包含在索引中。
所以,设计数据库时;该字段的默认值不应为NULL。
2.使用短索引
要索引字符串,如果可能,您必须指定前缀长度。
例如,如果您有CHAR(255)列;如果大多数值在前10或20个字符内都是唯一的。
不要对整个列建立索引。
短索引不仅可以提高查询速度,还可以节省磁盘空间和I/O操作。
3.索引列排序
MySQL查询仅使用一个索引;因此,如果在place子句中使用索引。
有序列不使用索引。
所以,当数据库默认排序满足要求时,不要使用排序功能。
如果需要的话最好为这些列创建复合索引。
4.Like语句函数
一般来说,如果要用的话,怎么用也是一个问题。
不使用“%aaa%”这样的索引,但可以使用“aaa%”这样的索引。
5.不要在列上运行
select*fromuserswhereYEAR(adddate)<2007>
在每一行上运行;由于它是无效的并且正在执行全表扫描,因此我们可以将其更改为:
select*fromuserswhereadddate<'2007-01-01';
6.NOTIN和操作。
使用:SQL优化原理
常用的简单规则如下:
1.不要有超过5个表连接(JOIN)
2.考虑使用临时表或电子表格来存储中间结果。
3.使用更少的细节
4。
不要太深入地收集意见。
5.由于表是相连的,更多的编译时间和连接。
控制性能就越困难。
6.最好将连接分成小部分,一次只处理一个部分。
7.优先考虑会显着降低结果的连接。
8.分区的好处不仅是减少SQLServer优化的时间,而且可以让SQL语句以可预测的方式和顺序执行。
如果你必须连接多个表来获取数据。
这可以被视为设计缺陷。