MySQL数据库——SQL优化之索引

一、准备工作——创建person表

-- ----------------------------
-- 创建Person表
-- ----------------------------
DROP TABLE IF EXISTS person;
CREATE TABLE person  (
  PID int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
  PNAME varchar(50)  NOT NULL COMMENT '姓名',
  PSEX varchar(10) NULL DEFAULT NULL COMMENT '性别',
	PAGE	int(11)  NOT NULL COMMENT '年龄',
  SAL decimal(7, 2) NULL DEFAULT NULL COMMENT '工资',
  PRIMARY KEY (PID)
) ENGINE = InnoDB AUTO_INCREMENT = 7001 CHARACTER SET = utf8mb4 COMMENT = '人员表';

二、创建索引

语法:
CREATE INDEX 索引名称 on 表名称(列名称);

为Person表的pname建立索引:

CREATE INDEX INDEX_PERSON_PNAME ON PERSON(PNAME);

查看SQL语句是否用了索引

EXPLAIN select * from person where pname= 'Jack';

f31b21b4d57f4429afd81825ae7d3e20.png 

三、在MySQL中为表创建主键的同时默认也创建了一个索引

-- 下面的DQL语句使用了索引。
EXPLAIN
select * from person
where id =1;

四、where pname like 模糊查询用到索引没有

-- 前后模糊中间精确不会使用索引
EXPLAIN
select  * from person where pname like '%e%';
-- 前面模糊后面精确也不会使用索引
EXPLAIN
select  * from person where pname like '%e';
-- 只有前面精确后面模糊才会使用索引,工作中数据量大的表模糊查询尽量不要使用 '%%',也不要使用'%a',他们都不支持索引
EXPLAIN
select  * from person where pname like 'e%';

五、如何创建一个复合索引,例如:我要对年龄和性别两个列创建复合索引

-- 为多个列创建复合索引
CREATE INDEX INDEX_PERSON_AGE_SEX ON PERSON(PAGE,PSEX);
-- 没有创建索执行下面DQL语句引耗时1.427秒,创建索引执行耗时1毫秒
SELECT * FROM PERSON WHERE PAGE =22 AND PSEX='男';
-- 创建的复合索引,但是只对第二个索引列单独进行where条件,不会使用索引
-- 如果创建复合索引,经常使用的列放在前面
EXPLAIN
SELECT * FROM PERSON WHERE  PSEX='男';

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深山老林.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值