2019-01-10 Mysql 记录

  • 1.根据查询建立合适的索引(单字段索引和联合索引),不要只设置PRIMARY索引,查询其他字段时会进行全表扫描
#查看索引
show  index from tbname;
#修改索引
alter table tbname add index (`字段名`, ...)

  • 2.按照索引书写查询语句,最左前缀原理
# 查看查询语句是全表查询还是索引查询
explain sql;

  • 3.distinct
    mysql 用distinct 来查询出某个字段不重复的记录
select distinct userid from user;

如果同时要查出其他字段,就只能用group by


  • 4.模糊查询
    如果匹配字段前缀字符串, like%, 会采用索引的range查询
    如果匹配字段中间字符串,%like%, 全表查询

  • 5.范围索引
    范围查询只有一个条件可以用到索引查询,同时,索引最多用于一个范围列,因此如果查询条件中有两个范围列则无法全用到索引。

  • 6.查询条件中有表达式
    不会使用索引

  • 7.临时表
  1. 如果GROUP BY 的列没有索引,产生临时表.
  2. 如果GROUP BY时,SELECT的列不止GROUP BY列一个,并且GROUP BY的列不是主键 ,产生临时表.
  3. 如果GROUP BY的列有索引,ORDER BY的列没索引.产生临时表.
  4. 如果GROUP BY的列和ORDER BY的列不一样,即使都有索引也会产生临时表.
  5. 如果GROUP BY或ORDER BY的列不是来自JOIN语句第一个表.会产生临时表.
  6. 如果DISTINCT 和 ORDER BY的列没有索引,产生临时表.
  • 8.Mysql 是先执行内联表然后再进行条件查询的最后再分组

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

你可能感兴趣的:(2019-01-10 Mysql 记录)