【Mysql】查询优化——减少回表 *** 作

【Mysql】查询优化——减少回表 *** 作,第1张

  聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。 叶子结点存储索引和行记录,聚簇索引查询会很快,因为可以直接定位到行记录。

  非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。 叶子节点存储聚簇索引值(主键id),需要扫码两遍索引树,先通过普通索引定位到主键值id,再通过聚集索引定位到行记录。

  回表查询可以理解为普通索引的查询,先定位主键值,再定位行记录,它的性能较扫一遍索引树更低。

  索引覆盖,即将查询sql中的字段添加到联合索引里面,只要保证查询语句里面的字段都在索引文件中,就无需进行回表查询;

  实际开发中,不可能把所有字段建立到联合索引,可根据实际业务场景,把经常需要查询的字段建立到联合索引中。

   在Mysql5.6的版本上推出,用于优化查询。 在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

   优化超多分页场景。 查询条件放到子查询中,子查询只查主键id,然后使用子查询中确定的主键关联查询其他的属性字段。

通过慢查询日志找出效率差的SQL, 再进一步判断索引是否高效

analyze table score

explain select * from score where falseG

尽量使用数值 *** 作

“小”类型够用,就不要选用“大”类型

MyISAM中,尽量使用固定长度数据列,减少存储碎片的发生;

对于Memory,InnoDB引擎,固定长度还是可变长度,不影响性能;

如果字符串数据列的不同取值的个数是有限的,就应该把它转换为ENUM数据列

select * from score procedure analyse()

1) MyISAM表消除碎片: optimize table president

2) 导出&导入, 适用所有存储引擎

mysqldump sampdb president >dump.sql

mysql sampdb <dump.sql

批量加载数据比单行数据加载效率高

无索引表比有索引表, 更快

SQL语句短比SQL语句长, 更快

加载效率比较: load data >load data local >insert into …

如果只能使用insert, 则推荐使用 单语句多行插入


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7398567.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存