数据库
1.索引
语法细节(要点)
在满足索引使用的场景下(where/order by/join on或索引覆盖),索引也不一定被使用
字段要独立出现
比如下面两条SQL语句在语义上相同,但是第一条会使用主键索引而第二条不会。
select * from user where id = 20-1; select * from user where id+1 = 20;
like查询,不能以通配符开头
比如搜索标题包含mysql的文章:
select * from article where title like '%mysql%';
这种SQL的执行计划用不了索引(like语句匹配表达式以通配符开头),因此只能做全表扫描,效率极低,在实际工程中几乎不被采用。而一般会使用第三方提供的支持中文的全文索引来做。
但是 关键字查询 热搜提醒功能还是可以做的,比如键入mysql之后提醒mysql 教程、mysql 下载、mysql 安装步骤等。用到的语句是:
select * from article where title like 'mysql%';
这种like是可以利用索引的(当然前提是title字段建立过索引)。
2.查询缓存
在[mysqld]段中配置query__type:
• 0:不开启
• 1:开启,默认缓存所有,需要在SQL语句中增加select sql-no-提示来放弃缓存
• 2:开启,默认都不缓存,需要在SQL语句中增加select sql-***来主动缓存(==常用==)
更改配置后需要重启以使配置生效,重启后可通过show variables like ‘query_***_type’;来查看:
当数据表改动时,基于该数据表的任何缓存都会被删除。
3.分区
当数据量较大时(一般千万条记录级别以上),MySQL的性能就会开始下降,这时我们就需要将数据分散到多组存储文件,==保证其单个文件的执行效率==。
最常见的分区方案是按id分区,如下将id的哈希值对10取模将数据均匀分散到10个.ibd存储文件中:
create table article( id int auto_increment PRIMARY KEY, title varchar(64), content text )PARTITION by HASH(id) PARTITIONS 10
4.水平分割和垂直分割
水平分割:通过建立结构相同的几张表分别存储数据
垂直分割:将经常一起使用的字段放在一个单独的表中,分割后的表记录之间是一一对应关系。