繁体   English   中英

替代索引

[英]Alternate for Indexing

我们需要基于日期时间过滤器的表结果。 但它在 mysql 中运行缓慢。 我无法在日期和时间戳列上实现索引,因为它会减慢我们的插入/更新速度。 因此,您能否建议任何替代方案,以便根据日期和日期时间过滤器以更好的性能快速选择数据。

SQL 查询:

SELECT   *
FROM     (
          SELECT  id
                  , title
                  , language
                  , lang_code
                  , financial
                  , fname
                  , lname
                  , mname
                  , mname_br
                  , suffix
                  , CASE WHEN DOB='0000-00-00' THEN NULL ELSE DOB END AS DOB
                  , street
                  , street2
                  , postal_code
                  , zip_ext
                  , city
                  , state
                  , country_code
                  , phone_home
                  , phone_biz
                  , phone_biz_ext
                  , phone_contact
                  , phone_cell
                  , status
                  , CASE WHEN date='0000-00-00 00:00:00' THEN NULL ELSE
                    CAST(date as datetime) END AS date
                  , sex
                  , referrer
                  , referrerID
                  , providerID
                  , ethnoracial
                  , pid
                  , temp_key
                  , primary_care
                  , default_facility
                  , created_by
                  , patientStatus
                  , primary_care_id
                  , Sec_HCFA
                  , noBalanceBill
                  , erx_entry
                  , erx_patient_id
                  , athenaID
                  , CASE WHEN licenseDate='0000-00-00 00:00:00' THEN NULL ELSE  licenseDate end as licenseDate
                  , race
                  , otherRace
                  , ethnicity
                  , otherEthnicity
                  , primary_care_phy_name
                  , primary_care_phy_id
                  , CASE WHEN dod_patient='0000-00-00' THEN NULL ELSE dod_patient END AS dod_patient-- 
                  , locked-- 
                  , co_man_phy-- 
                  , co_man_phy_id-- 
                  , vip-- 
                  , External_MRN_1-- 
                  , External_MRN_2-- 
                  , External_MRN_3-- 
                  , External_MRN_4
                  , as_id
                  , CASE WHEN acc_statement_date='0000-00-00' THEN acc_statement_date END AS acc_statement_date
                  , CASE WHEN timestamp='0000-00-00 00:00:00' THEN NULL ELSE timestamp END AS timestamp
                  , api_id
                  , fmh_pt_status
                  , race_code
                  , ethnicity_code
                  , patient_payer
                  , CASE WHEN date='0000-00-00 00:00:00' THEN NULL ELSE date END AS transfer_created
                  ,CASE  WHEN timestamp='0000-00-00 00:00:00' THEN NULL ELSE timestamp END AS transfer_updated
                  ,CASE  WHEN date > '2020-11-10 00:00:00' THEN 'new' ELSE 'changed' END AS flagfield
                  ,CASE  WHEN date='0000-00-00 00:00:00' THEN NULL ELSE date END AS sortdate
          FROM patient_data
          WHERE (date > '2020-11-10 00:00:00' or timestamp > '2019-04-01 19:53:57-04')
          AND month(date) > 0)t
          ORDER BY flagfield desc,
                  sortdate;
         )

id 列在表中有索引

摆脱

SELECT   *
FROM     (
         )t

除了减慢速度之外,它没有任何增加。

让我们专注于

  SELECT id
      FROM patient_data
      WHERE (date > '2020-11-10 00:00:00'
           or timestamp > '2019-04-01 19:53:57-04')
      AND month(date) > 0

缩短的查询是否运行“太慢”? 如果没有,那么我们可以将其用作派生表,看看是否会加快速度。 如果是这样,那么我们将需要进入UNION和索引。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM