簡體   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