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%'