Mysql索引实战Day1

CREATE TABLE `employees` (
    `id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR ( 24 ) NOT NULL DEFAULT '' COMMENT '姓名',
    `age` INT ( 11 ) NOT NULL DEFAULT '0' COMMENT '年龄',
    `position` VARCHAR ( 20 ) NOT NULL DEFAULT '' COMMENT '职位',
    `hire_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间',
    PRIMARY KEY ( `id` ),
    KEY `idx_name_age_position` ( `name`, `age`, `position` ) USING BTREE 
) ENGINE = INNODB AUTO_INCREMENT = 4 DEFAULT CHARSET = utf8 COMMENT = '员工记录表';
INSERT INTO employees ( NAME, age, position, hire_time )
VALUES
    (
        'LiLei',
        22,
        'manager',
    NOW());
INSERT INTO employees ( NAME, age, position, hire_time )
VALUES
    (
        'HanMeimei',
        23,
        'dev',
    NOW());
INSERT INTO employees ( NAME, age, position, hire_time )
VALUES
    (
        'Lucy',
        23,
    'dev',
    NOW());

1.全值匹配

2.最左前缀法则
如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。
3.不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
4.存储引擎不能使用索引中范围条件右边的列,右边的列不走索引
5.尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少 select * 语句
(查询列都在索引中,不需要回表查询)
6.mysql在使用不等于(!=或者<>), not in not exists 的时候无法使用索引会导致全表扫描
< 小于、 > 大于、 <= >= 这些,mysql内部优化器会根据检索比例、表大小等多个因素整体评估是否使用索引
7.is null,is not null 一般情况下也无法使用索引
8. like以通配符开头( '$abc...')mysql索引失效会变成全表扫描操作
%like%需要使用覆盖索引,查询的字段是索引字段才能走索引
9.字符串不加单引号索引失效 (类型隐式转换)
10.少用or或in,用它查询时,mysql不一定使用索引,mysql内部优化器会根据检索比例、表大小等多个因素整体评 估是否使用索引,详见范围查询优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

长方体移动工程师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值