中易网

mysql有几种索引类型?使用索引时都有那些地方要注意?sql优化原则

答案:1  悬赏:60  
解决时间 2021-02-18 17:05
mysql有几种索引类型?使用索引时都有那些地方要注意?sql优化原则
最佳答案
MySQL索引类型包括:
一、普通索引
这是最基本的索引,它没有任何限制。有以下几种创建方式:
1.创建索引
代码如下:

CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。

2.修改表结构

代码如下:
ALTER mytable ADD INDEX [indexName] ON (username(length)) -- 创建表的时候直接指定。
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAr(16) NOT NULL, INDEX [indexName] (username(length)) );

-- 删除索引的语法:
DROp INDEX [indexName] ON mytable;

二、唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

代码如下:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表结构
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAr(16) NOT NULL, UNIQUE [indexName] (username(length)) );

三、主键索引
它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAr(16) NOT NULL, PRIMARY KEY(ID) );

当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
四、组合索引
为了形象地对比单列索引和组合索引,为表添加多个字段:

代码如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAr(16) NOT NULL, city VARCHAr(50) NOT NULL, age INT NOT NULL );

为了进一步榨取MySQL的效率,就要考虑建立组合索引。
二:使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
1.索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2.使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAr(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3.索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4.like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。
5.不要在列上进行运算

select * from users where YEAR(adddate)<2007;
将在每个行上进行运算,这将导致索引失效而进行全表扫描,因此我们可以改成:

select * from users where adddate<‘2007-01-01';

6.不使用NOT IN和<>操作。

三:sql优化原则
常见的简化规则如下:
1.不要有超过5个以上的表连接(JOIN)
2.考虑使用临时表或表变量存放中间结果。
3.少用子查询
4.视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
5.连接的表越多,其编译的时间和连接的开销也越大,性能越不好控制。
6.最好是把连接拆开成较小的几个部分逐个顺序执行。
7.优先执行那些能够大量减少结果的连接。
8.拆分的好处不仅仅是减少SQL Server优化的时间,更使得SQL语句能够以你可以预测的方式和顺序执行。

如果一定需要连接很多表才能得到数据,那么很可能意味着设计上的缺陷。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
打苹果手机,提示对方无法接听电话,是对方设
1G相当于多少牛的力?
如果剑姬开r,发条e罩在剑姬头上,开r,会如何
在顺序表中进行插入和删除时为什么必须移动数
梁五沟这个地址在什么地方,我要处理点事
使命召唤6局域网联机是多人对战还是联机过单
老北京卤煮这个地址在什么地方,我要处理点事
养了三年的乌龟,一点都没长大
怎么把自己的广场舞加入糖豆广场舞
辽宁华塑实业集团怎么去啊,有知道地址的么
86年阴历四月八号属虎人2011年运程怎么样
用适当的语言或化学用语填空(1)我国古代一
农行公积金 在网上怎么查询
皮仁堂零售连锁有限公司文星街NO.55这个地址
做了开胸手术,有一根好像是塑料的一根线,怎么
推荐资讯
金苹果幼儿园(玉溪市澄江县)地址有知道的么?
孟成饭店地址在什么地方,想过去办事
笔记本电脑自动维护是怎么回事 而且什么都用
简述环境法的渊源
和爸妈吵架作文1000字
求极限题目
淄博市公路管理局沂源分局三岔所这个地址在什
小红书有假货吗?他们公司怎么样啊?
谁能帮我起个帮派名字,不要已经注册的名字,
大柳树家具城我想知道这个在什么地方
有安卓苹果系统互通的手游么?回合制的
有什么工作是动笔不用动电脑的?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?