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、对表中大字段的处理

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

  • 相关阅读:
    c++虚继承
    linux常用命令大全
    数据库三大范式最通俗解释
    PG数据库空间大小及数据库对象占用空间大小
    Oracle表分区详解
    Excel数据导入PG库,字符串正则表达式
    Oracle 执行计划
    ASP.NET MVC5框架揭秘 学习笔记01
    .NET简单学习
    蓝桥杯_算法训练_ALGO10_集合运算
  • 原文地址:https://www.cnblogs.com/brightwang/p/1654249.html
Copyright © 2011-2022 走看看