当前位置:网站首页>【MYSQL】索引的理解和使用
【MYSQL】索引的理解和使用
2022-06-25 07:54:00 【小艾同学~】
1.什么是索引
在数据量和访问量不大的情况下,MySQL的访问时非常快速的,是否加索引对访问影响不大。但是当数据和访问量剧增的时候,就会发现MySQL变慢,甚至down掉,这就必须考虑优化SQL了。给数据库建立正确合理的索引,是MySQL优化的一个重要手段。
索引的目的在于提高查询效率,可以类比字典,如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从前往后找到字母y,再找到剩下的"sql"。如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的。出了词典,生活中随处可见索引的例子,如火车站的车次表、图书的目录等。它们的原理都是一样的,通过不断的缩小想要获取数据的范围来筛选出想要的结果,同时把随机的时间变成顺序的时间,也就是我们总是通过一种查找方法来锁定数据。
在创建索引时,需要考虑哪些列会用于SQL查询,然后为这些列创建一个或多个索引。事实上,索引也是一种表,保存着主键或索引字段,以及一个能将每个记录只想实际表的指针(非聚簇索引和聚簇索引,一个在索引中保存的是字段值的地址,一个保存的就是字段的值)。数据库用户是看不到索引的,它们只是用来加速查询的。数据库搜索引擎使用索引来快速定位记录。
INSERT 和 UPDATE 语句在拥有索引的表中执行会花费更多的时间,而 select 语句却会执行得更快,这是因为在进行插入和更新时,数据库也需要插入或更新索引值。
2.索引的创建
2.1 索引类型
- UNIQUE (唯一索引):不可能出现相同的值,可以有NULL值;
- INDEX (普通索引):允许出现相同的索引内容;
- PRIMARY KEY (主键索引):不允许出现相同的值;
- FULLTEXT INDEX (全文索引):可以针对值中的某个单词,但 效率确实不敢恭维;
- 组合索引:实质上是将多个字段建到一个索引里,列值得组合必须唯一
2.2 添加索引的几种方法
使用ALTER 语句对表添加索
ALTER TABLE 应用于数据表创建完毕之后再添加
--ALTER TABLE 表名 ADD 索引类型 索引名(字段名)
ALTER TABLE tab_identity ADD UNIQUE index_test (name);
使用create语句对表添加索引
CREATE INDEX 可用于对表增加 普通索引 和 UNIQUE 索引,可用于建表时创建索引。
-- create 索引类型 索引名称 on 表名(字段)
create INDEX iden_index on tab_identity(name)
3.索引的删除
删除索引可以使用 ALTER TABLE 或 DROP INDEX 语句来实现。DROP INDEX 可以在 ALTER TABLE 内部作为一条语句处理,其格式如下:
drop index index_name on table_name; -- 普通索引和唯一索引可用此方法删除,主键索引不能用此方法删除
alter table table_name drop index index_name; -- 主键索引不能用此方法删除
alter table table_name drop primary key; -- 可以删除主键索引,前提是主键没有自增 auto_increment,如果有自增将无法删除,需先删除自增
4.索引失效
4.1 索引不会含有NULL值
只要列中包含有NULL值,都将不会被包含在索引中,符合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。
4.2 索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作,尽量不要包含多个列的排序,如果需要最好给这些列建复合索引。
4.3 like语句操作
一般情况下不鼓励使用like操作,如果非用不可,注意正确的使用方式。like '%aaa%'不会使用索引,而 like ‘aaa%’ 可以使用索引.
4.4 不使用 NOT IN、<>、!=操作,但是<、<=、=、>、>=、BETWEEN、IN是可以用到索引的
4.5 索引要建立在经常进行select操作的字段上
这是因为,如果这些列很好用到的话,那么有无索引并不能明显改变查询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求。
4.6 索引要建立在值比较唯一的字段上
4.7 对于那些定义为text、image、bit数据类型的别不应该增加索引。因为这些列的数据要么相当大,要么取值很少
4.8 在 where 和 join 中出现的列需要建立索引
4.9 where的查询条件里有不等号(where column !=…),MySQL将无法使用索引
4.10 如果where子句的查询条件里使用了函数(如:where DAY(column)=…),MySQL将无法使用索引
4.11 在join操作中(需要从多个数据表提取数据时),MySQL只有主键和外检的数据类型相同时才使用索引,否则即使建立了索引也不会使用
5.查看索引
-- 查看表里面所有索引
show KEYS FROM tab_identity;
-- 查看是否用到了索引
explain SELECT * FROM tab_identity where name LIKE '谢%'
边栏推荐
- Hyper-v:Hyper-v 第 1 代或第 2 代虚拟机
- How to calculate the characteristic vector, weight value, CI value and other indicators in AHP?
- 如何设计测试用例
- 想开个户,网上股票开户安不安全?
- Discrimination of configuration, software configuration items and software configuration management items
- Unknown table 'column of MySQL_ STATISTICS‘ in information_ schema (1109)
- Exchange: manage calendar permissions
- With the beauty of technology enabled design, vivo cooperates with well-known art institutes to create the "industry university research" plan
- Prepare these before the interview. The offer is soft. The general will not fight unprepared battles
- 声纹技术(一):声纹技术的前世今生
猜你喜欢

城鏈科技平臺,正在實現真正意義上的價值互聯網重構!

In Section 5 of bramble pie project practice, Nokia 5110 LCD is used to display Hello World

Internet of things (intelligent irrigation system - Android end)

检测点是否在多边形内

How to calculate the D value and W value of statistics in normality test?

Lvs-dr mode multi segment case

How to calculate critical weight indicators?

城链科技平台,正在实现真正意义上的价值互联网重构!

软件工程复习题

35岁腾讯员工被裁员感叹:北京一套房,存款700多万,失业好焦虑
随机推荐
在哪个平台买股票开户安全?求分享
Word2vec, phrases, phraser, keyedvectors commonly used in gensim
UEFI: repair efi/gpt bootloader
leetcode. 13 --- Roman numeral to integer
【操作教程】TSINGSEE青犀视频平台如何将旧数据库导入到新数据库?
Is it really safe to pay new debts? Is it risky
Can I grant database tables permission to delete column objects? Why?
Various synchronous learning notes
Lvs-dr mode multi segment case
紧急行政中止令下达 Juul暂时可以继续在美国销售电子烟产品
GPU calculation
在二叉树(搜索树)中找到两个节点的最近公共祖先(剑指offer)
rosbag
Index analysis of DEMATEL model
Exchange:管理日历权限
Discrimination of configuration, software configuration items and software configuration management items
About i/o -- the relationship between memory and CPU and disk
The city chain technology platform is realizing the real value Internet reconstruction!
Bluecmsv1.6- code audit
软件测试月薪10K如何涨到30K,只有自动化测试能做到