zoukankan      html  css  js  c++  java
  • mysql

    1、mysql的子查询实现的很烂,会发生不使用索引的问题,据官方说6以后会改善。
    例如:select * from ol_question where questionid in (select questionid from ol_questiontag)
    正常应该是查询完ol_questiontag中的questionid后在通过索引查询ol_question 中数据,但是通过explain下的观察在查询ol_question 时竟然没有利用到主键索引,大bug。。。
    mysqlsubquery.jpg
     
    2、explain和profiling是查询优化的好助手。
    3、索引的一个最大好处是在排序的时候。而且group的时候也可以享受到。但是切记不可对同一字段进行两次排序,教训啊。在最近对试题查询进行优化的时候(最后发现是因为数据传输而不是查询慢…)发现同事存在一个误区,给一些枚举字段建索引,这样的索引没有意义唯一性太低的字段不适合建索引。具体原因参考数据库索引的机制。而且据说数据库只会使用一个索引?!
    4、避免过于面向对象导致N+1问题,如试题查询曾经遇到的问题。

    5、join的优化

    查了些资料,mysql在join时是使用nested loop join,也就是说在join表时是用驱动表作为结果集到其他表中进行循环,并且合并结果集,知道这样的思路也就知道了应该注意的地方:也就是以小结果集来驱动大结果集,这样可以提高性能。而且要注意给join的字段加索引。

    6、对表中大字段的处理

    现在所做的项目中试题表由于题目内容较大,查询就应该分场景进行,仅在需要的时候去读取大字段的内容,这样可以减少网络传输,甚至可以考虑分表进行存储,这样可以减少查询时数据库读取大字段,而且据说除非在索引中完成的查询,否则即使查询其他字段,数据库在查询时候也会去读取大字段(待验证)。
    (待续…)

  • 相关阅读:
    FLUSH TABLES WITH READ LOCK 锁全局
    第三届中国云计算用户大会笔记和心得
    第三届中国云计算用户大会笔记和心得
    报表或BI的价值在哪?
    ZooKeeper
    TypeError:First argument must be file descriptor
    org.eclipse.core.runtime.OperationCanceledException
    perl 安装 ZooKeeper模块
    2、Zookeeper集群搭建、命令行Client操作
    1、Zookeeper熟悉和用途综述
  • 原文地址:https://www.cnblogs.com/brightwang/p/1654249.html
Copyright © 2011-2022 走看看