完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
索引的基本命令:
1.1 查询索引, show index from 表名 1.2 创建索引(单列的辅助索引) : alter table 表名 add index idx_name(name) ###name指的是要将表中的那个字段设置位索引 , idx_name :这个是先创建的索引名 1.3 创建联合索引:alter table 表名 add index idx_c_P(countrycode,population); #####括号里面指的是多个字段 1.4 创建唯一索引:alter table 表名 add unique index uidx_dis(district); 1.5 创建前缀索引:alter table 表名 add index idx_dis(district(5)) 1.6 删除索引:alter table city drop index 索引名; |
|
|
|
|
|
|
|
执行计划分析:
使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 3.1作用
explain sql 语句 mysql> explain select * from Customers; +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ | 1 | SIMPLE | Customers | ALL | NULL | NULL | NULL | NULL | 5 | NULL | +----+-------------+-----------+------+---------------+------+---------+------+------+-------+ 3.3 分析执行计划 3.3.1 table:表名 3.3.2 type:查询的类型:1.全表扫描 :all 2.索引扫描: index , range, ref,eq_ref,const(system),null 从左到右性能变好 index:全索引扫描, range:索引范围扫描 ref:辅助索引等值查询 select * from city where countrycode='CHN' union all select * from city where countrycode='USA'; eq_ref:多表连接时,子表使用主键列或唯一列列作为连接条件 const(system) :主键或者唯一键的等值查询 select * from city where id=100; 3.3.3 possible_keys:可能会用到的索引 key:真正选择了哪个索引 key_len 索引覆盖长度 |
|
|
|
索引应用规范:
4.1建立索引的原则(DBA运维规范) (1)建表必须要有主键,一般是无关列,自增长 (2)经常做where条件列,order by group by join on,distinct的条件 (3)最好使用唯一值多的列作为联合索引前导列,其他的按照联合索引优化细节来做 (4)列值长度较长的索引列,我们建议使用前缀索引 (5)降低索引条目,一方便不要创建没有索引,不常使用的索引清理,percona toolkit(xxxxxxxx) (6)索引维护要避开业务繁忙器 (7)小表不建索引 4.2 不走索引的情况(开发规范) (1)没有查询条件,或者查询条件没有建立索引 (2)查询结果集是原表中的大部分数据,应该是25%以上, (3)索引本身失效,统计数据不真实 (4)查询条件使用函数在索引列上,或者对索引列进行运算,包括(+,-,*,/,!等) (5)隐式转换导致索引失效 (6)<>,not in 不走索引(辅助索引) (7)like "%aa" 百分号在最前面不走 (8)联合索引 |
|
|
|
联合索引的key_len计算方式
1 所有的索引字段,如果没有设置not null,则需要加一个字节。 2.定长字段,int占四个字节,bigint占八个字、char(n)占n个字符。 3 DATE 3 个字节 DATETIME 8 个字节 TIMESTAMP 4 个字节 4.对于变成字段varchar(n),则有n个字符+两个字节。 5.不同的字符集,一个字符占用的字节数不同。latin1编码的,一个字符占用一个字节,gbk编码的,一个字符占用两个字节,utf8编码的,一个字符占用三个字节 utf8mb4编码的,一个字符占用4个字节 6 key_len只指示了where中用于条件过滤时被选中的索引列,是不包含order by/group by这一部分被选中的索引列的,所以可能存在排序用到索引但是key_len不对等的情况,这里要注意 INNODB的索引会限制单独Key的最大长度为767字节,联合索引的单列项同样如此 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
“0元购”智元灵犀X1机器人,软硬件全套图纸和代码全公开!资料免费下载!
3126 浏览 2 评论
1391 浏览 0 评论
【实操文档】在智能硬件的大模型语音交互流程中接入RAG知识库
6632 浏览 1 评论
防止AI大模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4
1080 浏览 0 评论
不可错过!人工神经网络算法、PID算法、Python人工智能学习等资料包分享(附源代码)
3401 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 19:00 , Processed in 0.798328 second(s), Total 80, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号