MySql优化

mysql简述

我个人理解的MySQL数据库,它的本质上是一张张类似Excl的表结构组成的。每次对数据库的操作,都是先通过sql中给定的条件去除不满足的数据,然后把满足条件的数据拷贝到缓冲池里,通过sql中写的连接方式进行连接组合,然后对缓冲池中重新组合出的表结构进行操作,完成操作后,在把结果反馈出来。
sql执行时,主要时间是花在下面几个方面:1:mysql查询到满足条件的数据;2:把符合条件的数据拷贝到缓冲池;3:连接组合时的计算。
据此,我优化sql就从减少拷贝时间着手

创建索引

对最常用的字段添加索引,此处是给定添加一个普通索引(索引尽量不要创建太多,避免出现索引占用的空间比正常表还大,这样回占用大量的数据库空间);

ALTER TABLE `test` 
ADD INDEX `i_abc`(`abc`);

查询是否有走索引

对最常用的字段添加完索引后,如果查询速度仍然慢,就需要检查你的sql是否有走索引,如果没有走的话,多数是因为表字段的排序规则与主表的排序规则不匹配;

EXPLAIN SELECT * FROM `test` ;

搜索引擎

普通的使用事务级(InnoDB)的引擎就可以了

优化sql

单表查询

select a,b,c from abc;
select * from abc;

上方写全字段的速度要大于写*符号的

表连接

对于一个sql来说,单表的查询速度是大于多表连接查询的,而多表的连接方式的速度大致如下:

left join=right join=inner join>in>join

所以,再写sql的时候,尽量避免使用join这种笛卡尔积

分页查询

SELECT  各种字段
FROM `table_name`
WHERE 各种条件
LIMIT 0,10;
SELECT  各种字段
FROM `table_name` main_tale
RIGHT JOIN 
(
SELECT  子查询只查主键
FROM `table_name`
WHERE 各种条件
LIMIT 0,10;
) temp_table ON temp_table.主键 = main_table.主键

模糊查询

如下所示的模糊查询,是不走该字段的索引的,因为mysql遵循的是最左原则。

select * from `table_name`
WHERE  table_feild like '%abc%'

以上可以把这个模糊查询的字段,存一个返利,放在其他字段中。如下所示:

select * from `table_name`
WHERE  table_feild like 'abc%' or  table_feild like 'cba%'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值