zoukankan      html  css  js  c++  java
  • mysq 索引相关知识

    之前为了图方便,在向表里插入数据得时候经常会用到这样一个语句insert into tablA select * from tableB,但是今天看到一篇文章,瞬时点醒了我,这样使用会有很大得问题,我得理解是:

    --》select * from tableB 是进行得全表搜索,在搜索时会出现锁表得情况,这样一来,在同时有向tableB表插入数据得时候,就会报错。

    所以:

    解决这种问题得办法是:创建索引,且是聚合索引,这样在查询时候就无需进行回表操作,不回表,就不存在锁表得情况,

    但是:

    问题来了,如果所建得索引走不上,因为mysql也有自己得一套优化机制,如果它发现你得优化还不如它,它就会走自己得优化方式,所以你这时可能需要强制走这么一个索引,方式为

    INSERT INTO order_record SELECT
        * 
    FROM
        order_today FORCE INDEX (idx_pay_suc_time)
    WHERE
        pay_success_time <= '2020-03-08 00:00:00';

    如果不想走任何索引得方式是:

    可以使用ignore index(),这个指令可以强制Mysql在查询时,不使用某索引。

    select  CustName,count(1) c from WorkOrder  ignore index(ix_date) 
    where CreateDate>'2016-5-1' and CreateDate<'2017-1-1' group by CustName having c>100 order by c desc;

    参考文章:https://mp.weixin.qq.com/s?__biz=MzAxNjk4ODE4OQ==&mid=2247488692&idx=2&sn=73fa5ef914565806f06b2a03af627047&chksm=9bed35c6ac9abcd092cf60567f153a563631fb8a075deedb6a2b2f0dae088d4d88231a470b9a&scene=126&sessionid=1587691813&key=fd05e963367db14312f801c979b57b1f789eb5049916c6a262ef720b9bda303f9c39736362d348c0fe5b6a545bd53fc848d8e947dbbc684c7e6971b8de7e5bbae2599991eb06457b3e4091fc0d0b5083&ascene=1&uin=MjIzMzc4NzQxMA%3D%3D&devicetype=Windows+10&version=62080079&lang=zh_CN&exportkey=A%2BJbZmzkes42i9V2mLb0KLU%3D&pass_ticket=KViBI%2BIFLoHZqmRopC3RGpIam4wW%2F1cmY5hAuj76Mpd%2B6G6s8FE8tQu%2FcD6z7tZt

  • 相关阅读:
    Android10_内容提供者_内容观察者_标题栏
    Android08_广播接受者_服务
    Android09_远程服务_系统服务_aidl
    Android07_多界面_Activity生命周期
    Android06_getpost提交_文件上传_多线程下载
    Android_handler_网络请求_img框架
    Android开发04
    java 正则表达式验证邮箱
    postman 基本用法
    java 微信申请退款的开发
  • 原文地址:https://www.cnblogs.com/jiazhutao/p/12770672.html
Copyright © 2011-2022 走看看