Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何应用此查询的索引_Php_Mysql_Indexing - Fatal编程技术网

Php 如何应用此查询的索引

Php 如何应用此查询的索引,php,mysql,indexing,Php,Mysql,Indexing,我希望将索引应用于此查询。尝试在这四个表列上添加索引,这将有助于: SELECT user_id,username,full_name,display_name,profile_pic,email, fb_id,image1,image2,image3,image4,image5,default_pic, street_address,locality,country,state,is_verified,is_online, city,image

我希望将索引应用于此查询。

尝试在这四个表列上添加索引,这将有助于:

SELECT  user_id,username,full_name,display_name,profile_pic,email,
        fb_id,image1,image2,image3,image4,image5,default_pic,
        street_address,locality,country,state,is_verified,is_online,
        city,image6,image7,image8,image9,image10,last_login,
        IFNULL( (
                SELECT  STATUS
                    FROM  vidioo_contacts
                    WHERE  (contact_id = '55000'
                              AND  user_id = vu.user_id
                          )
                      OR  (contact_id = vu.user_id
                              AND  user_id = '55000')),0) AS STATUS,
        (3959 * ACOS( COS(RADIANS(0)) * COS(RADIANS(latitude)) * 
           COS(RADIANS(longitude) - RADIANS(0)) + SIN(RADIANS(0)) *
           SIN(RADIANS(latitude)))
           ) AS distance
    FROM  vidioo_users vu
    WHERE  user_id != '55000'
      AND  gender LIKE 
        ( SELECT  CASE WHEN show_me = 'everyone'
                     THEN '%'
                     ELSE IF(LENGTH(show_me) < 1, '%', show_me)
                  END
            FROM  vidioo_users
            WHERE  user_id = '55000'
            LIMIT  1 
        )
      AND  IFNULL(vu.is_deleted,0) != 55000
      AND  vu.user_id NOT IN (
        SELECT  DISTINCT contact_id
            FROM  vidioo_blocked_users
            WHERE  bloked_by_user = 55000
                          )
      AND  DATEDIFF(NOW(),last_login) < 7
    ORDER BY  last_login DESC
    LIMIT  0,20

如果表有多列索引,那么mysql使用索引最左边的前缀。例如,您有以下选择查询-

`从tbl_名称中选择*,其中col1=val1; 从tbl_名称中选择*,其中col1=val1和col2=val2

从tbl_名称中选择*,其中col2=val2; 从tbl_名称中选择*,其中col2=val2和col3=val3`

如果col1、col2、col3上存在索引,则只有前两个查询使用该索引。第三个和第四个查询确实涉及索引列,但是col2和col2,col3不是col1,col2,col3最左边的前缀

在您的情况下,必须创建3个索引作为

索引用户id、性别、上次登录 索引用户id 索引\u 3由\u用户阻塞\u 注意:-索引太多会减慢插入查询处理。
有关更多详细信息,请参见其他建议、change AND DATEDIFFNOW、last_login<7 to

您所拥有的将列last_login隐藏在函数DATEDIFF中,使其无法用于索引。然后,再加上

last_login > NOW() - INTERVAL 7 DAY
这可能没有帮助,但可能会

还有,改变

INDEX(last_login)

连同

AND NOT EXISTS( SELECT * FROM vidioo_blocked_users
        WHERE  bloked_by_user = 55000
          AND  contact_id = vu.user_id )

首先,规范你的设计
AND  vu.user_id NOT IN (
    SELECT  DISTINCT contact_id
        FROM  vidioo_blocked_users
        WHERE  bloked_by_user = 55000
                      )
AND NOT EXISTS( SELECT * FROM vidioo_blocked_users
        WHERE  bloked_by_user = 55000
          AND  contact_id = vu.user_id )
INDEX(bloked_by_user, contact_id) -- in either order