zoukankan      html  css  js  c++  java
  • Mysql语句优化

    1、比如 select id from t where num is null 这样的 sql 也是可以的。但是最好不要给数据库留 NULL,尽可能的使用 NOT NULL 填充数据库。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了,不管是否插入值(NULL 也包含在内),都是占用 100 个字符的空间的,如果是 varchar 这样的变长字段,null 不占用空间。可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样查询:select id from t where num= 0。尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

    2、select * from admin left join log on admin.admin_id= log.admin_id where  log.admin_id>10 如何优化?

    优化思想:先查询admin中id大于10的,成一个虚拟表,再通过此虚拟表中的id与log进行连接查询
    优化为: select * from (select  *  from admin where admin_id>10) T1 lef join log on T1.admin_id =log.admin_id。
    使用 JOIN 时候,应该用小的结果驱动大的结果(left join 左边表结果尽量小如果有条件应该放到左边先处理,right join 同理反向),同时尽量把牵涉到多表联合的查询拆分多个 query(多个连表查询效率低,容易到之后锁表和阻塞)。
    3、limit 的基数比较大时使用 between
    例如:select * from admin order by admin_id limit 100000,10
    优化为:select * from admin where admin_id between 100000 and 100010 order by admin_id。
    4、尽量避免在列上做运算,这样导致索引失效
    例如:select * from admin where year(admin_time)>2014
    优化为: select *  from admin where admin_time>'2014-01-01′
    5、当得知查询到只有一条数据时,使用limit  0;去终结查询。

    6、Where 子句中:where 表之间的连接必须写在其他 Where 条件之前,那些可以过滤掉最大数量记录的条件必须写在 Where 子句的末尾.HAVING 最后。

    7、用 EXISTS 替代 IN、用 NOT EXISTS 替代 NOT IN。EXISTS会根据索引去进行判断是否存在,而IN和NOT IN 不会。但不全是,和数据库版本,存储引擎,数据量有关系,不能一概而论

    8、避免在索引列上使用 IS NULL 和 IS NOT NULL

    9、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

    10、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描。

    11、应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。

    12、任何情况下都不要使用select *  不要返回无用的字段,且:当我们不使用* 去查询时,有可能会触发覆盖索引提高查询效率,

    13、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

    14、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,使用合并多个查询结果

    如:select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all   select id from t where num=20

     15、模糊查询中  like  %zi   %zi%,是不能使用索引的,索引只会根据左边的字段去查询。

    16、为什么不要使用身份证作为主键。:一般主键是有序的,若很多用户的身份证不仅仅无序,索引依照主键存储,当存储之后,由于无序,很可能发生叶节点的大量计算和创建。

     
  • 相关阅读:
    C#获取本地IP地址
    C#中将字符串转换成数值
    JavaScript实现基于对象的双端队列
    Java网络编程
    JavaScript实现基于对象的队列
    JavaScript实现基于对象的栈
    JavaScript实现基于数组的栈
    发送短信按钮倒计时案例
    JavaScript动态显示时间
    html
  • 原文地址:https://www.cnblogs.com/guanyuehao0107/p/11969466.html
Copyright © 2011-2022 走看看