为什么MYSQL不使用我的索引?

时间:2014-02-18 12:45:57

标签: mysql sql join indexing

我有表karton00,其中包含数千条记录。这使查询变慢。我想使用索引,但即使我设置它们,它们也没有被使用。

Here is my table.here is the result of using EXPLAIN.

这是我的疑问:

SELECT '' checkbox,
       k00_eszkozid,
       k00_eszkoznev,
       k01_gyariszam,
       k01_leltszam,
       prsn_name,
       k00_status,
       tstikon,
       k00_startflow,
       tstname,
       k00_eszkozid,
       k01_gyariszam,
       k01_leltszam
FROM   karton00
       LEFT JOIN karton01
              ON k00_eszkozid = k01_eszkozid
                 AND k01_status = 'A'
       LEFT JOIN karton02
              ON k00_eszkozid = k02_eszkozid
                 AND k02_status = 'A'
       LEFT JOIN karton04
              ON k00_eszkozid = k04_eszkozid
                 AND k04_status = 'A'
       LEFT JOIN karton05
              ON k00_eszkozid = k05_eszkozid
                 AND k05_status = 'A'
       LEFT JOIN karton06
              ON k00_eszkozid = k06_eszkozid
                 AND k06_status = 'A'
       LEFT JOIN karton08
              ON k00_eszkozid = k08_eszkozid
                 AND k08_status = 'A'
       LEFT JOIN karton09
              ON k00_eszkozid = k09_eszkozid
                 AND k09_status = 'A'
       LEFT JOIN telephely et
              ON k06_telephelyid = et.telepid
       LEFT JOIN ktghely00 ek
              ON k02_ktghid = ek.ktghid
       LEFT JOIN person00 us
              ON k06_userid = prsn_id
       LEFT JOIN ktghely00 fk
              ON prsn_ktgh = fk.ktghid
       LEFT JOIN telephely ft
              ON prsn_telep = ft.telepid
       LEFT JOIN tamstatus
              ON k02_tamstatusid = tstid
       LEFT JOIN szakleltar
              ON k02_szakleltarid = szleltid
       LEFT JOIN tamszerv
              ON k02_tamszervid = tszid
       LEFT JOIN ktghely01
              ON k02_vgazdaid = vgid
                 AND vgstatus = 'A'
       LEFT JOIN ktghely00 vk
              ON vgktghid = vk.ktghid
       LEFT JOIN szallitok m
              ON k05_mincegid = m.szallid
       LEFT JOIN szallitok s
              ON k04_szallitoid = s.szallid
       LEFT JOIN dctnry00 ym
              ON k05_minosit = ym.dctnryname
                 AND ym.dctnrygrp = 'YESNO'
       LEFT JOIN dctnry00 yd
              ON k05_check = yd.dctnryname
                 AND yd.dctnrygrp = 'YESNO'
WHERE  k00_status IN ( 'A', 'H' )
       AND ( k02_vgazdaid IN ( 7 ) )
       AND NOT EXISTS (SELECT *
                       FROM   eszkozkizar
                       WHERE  ez_flid = 0
                              AND ez_emintaid = k00_eszkozmintaid
                              AND k00_uzembedatum < ( Date_add(Curdate(),
                                                      INTERVAL ez_honap month) )
                              AND k00_uzembedatum != ''
                              AND k02_vgazdaid NOT IN ( 7 ))
       AND NOT EXISTS(SELECT *
                      FROM   eszkozkizar
                      WHERE  ez_flid = 0
                             AND ez_emintaid = k00_eszkozmintaid
                             AND k02_tamszervid = ez_tamszerv
                             AND k02_tamstatusid = ez_tamsts
                             AND k00_uzembedatum < ( Date_add(Curdate(),
                                                     INTERVAL ez_honap month) )
                             AND k00_uzembedatum != ''
                             AND k02_vgazdaid NOT IN ( 7 ))
ORDER  BY k00_eszkoznev ASC; 

1 个答案:

答案 0 :(得分:-1)

您也可以使用USE INDEX (index_list)声明:http://dev.mysql.com/doc/refman/5.5/en/index-hints.html