• mysql重点--正确使用


    1.一些错误情况

    数据库表中添加索引后确实会让查询速度起飞,但前提必须是正确的使用索引来查询,如果以错误的方式使用,则即使建立索引也会不奏效。
    即使建立索引,索引也不会生效:

     1 - like '%xx'
     2     select * from tb1 where name like '%cn';
     3 - 使用函数
     4     select * from tb1 where reverse(name) = 'wupeiqi';
     5 - or
     6     select * from tb1 where nid = 1 or email = 'seven@live.com';
     7     特别的:当or条件中有未建立索引的列才失效,以下会走索引
     8             select * from tb1 where nid = 1 or name = 'seven';
     9             select * from tb1 where nid = 1 or email = 'seven@live.com' and name = 'alex'
    10 - 类型不一致
    11     如果列是字符串类型,传入条件是必须用引号引起来,不然...
    12     select * from tb1 where name = 999;
    13 - !=
    14     select * from tb1 where name != 'alex'
    15     特别的:如果是主键,则还是会走索引
    16         select * from tb1 where nid != 123
    17 - >
    18     select * from tb1 where name > 'alex'
    19     特别的:如果是主键或索引是整数类型,则还是会走索引
    20         select * from tb1 where nid > 123
    21         select * from tb1 where num > 123
    22 - order by
    23     select email from tb1 order by name desc;
    24     当根据索引排序时候,选择的映射如果不是索引,则不走索引
    25     特别的:如果对主键排序,则还是走索引:
    26         select * from tb1 order by nid desc;
    27  
    28 - 组合索引最左前缀
    29     如果组合索引为:(name,email)
    30     name and email       -- 使用索引
    31     name                 -- 使用索引
    32     email                -- 不使用索引

    2.其他注意事项

    - 避免使用select *

    count(1)或count(列) 代替 count(*)
    - 创建表时尽量时 char 代替 varchar
    - 表的字段顺序固定长度的字段优先
    - 组合索引代替多个单列索引(经常使用多个条件查询时)
    - 尽量使用短索引
    - 使用连接(JOIN)来代替子查询(Sub-Queries)
    - 连表时注意条件类型需一致
    - 索引散列值(重复少)不适合建索引,例:性别不适合

    3.limit分页

    这里只做简单表述。在使用
     
    select sth from table_name limit 0,10;
     
    过程中发现当数据量大的时候。比如limit 24322,10需要ALL遍历到两万条后才会拿到
    所需要的数据。需要的时间非常长,优化为:
     
    select * from bigdata where nid > 3000 limit 3000,10;
     
    这样会进行range查询。速度非常快,所做的仅仅是记录下上次查询过的nid就行。
    同样在直接输入页数比如客户输入4989,怎么样处理?
    利用B-tree数组来先粗略定位页数也许可行。
     

     

  • 相关阅读:
    Android 如何处理崩溃的异常
    体验下Xcode5与ios7
    IOS 改变导航栏返回按钮的标题
    android之HttpURLConnection
    android异步加载图片
    android 从服务器上获取APK下载安装
    android AsyncTask异步下载并更新进度条
    android 四种堆状态
    Windows Azure 的开源 DNA
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/khal-Cgg/p/6004621.html
Copyright © 2020-2023  润新知