优化-BINARY问题
优化-BINARY问题
今天遇到一个SQL优化的任务
执行计划如下:
EXPLAIN SELECT ID, USER_NAME, PASSWORD, USER_STATUS, LOGIN_FAILED_COUNT, CUSTOMER_ID, CONVERT ( AES_DECRYPT( UNHEX( PHONE ), 'xxxx' ), CHAR ) AS PHONE, CONVERT ( AES_DECRYPT( UNHEX( EMAIL ), 'xxxx' ), CHAR ) AS EMAIL, MODIFY_TIME FROM OPM_USER_USER WHERE BINARY USER_NAME = 'zhuyajun'
执行计划如下:
EXPLAIN SELECT ID, USER_NAME, PASSWORD, USER_STATUS, LOGIN_FAILED_COUNT, CUSTOMER_ID, CONVERT ( AES_DECRYPT( UNHEX( PHONE ), 'xxxx' ), CHAR ) AS PHONE, CONVERT ( AES_DECRYPT( UNHEX( EMAIL ), 'xxxx' ), CHAR ) AS EMAIL, MODIFY_TIME FROM OPM_USER_USER WHERE USER_NAME = BINARY 'zhuyajun';
再说明一下,这里看到的key_len是302,因为我的表里有302条数据和zhuyajun类似,可以看出的是这个索引查询是搜索到了这302条数据,最后再用binary对这302条数据中zhuyajun这条数据做判断
分析SQL执行计划
1.查询执行计划
explain + SQL语句 explain select * from tb;
结果
id: 1 -- 编号 select_type: SIMPLE -- 查询类型 table: tb -- 表 type: system -- 类型 possible_keys: NULL -- 预测用的到的索引 key: NULL -- 实际使用的索引 key_len: NULL -- 实际使用的索引长度 ref: NULL -- 表之间的引用 rows: 0 -- 通过索引查询到的数据量 Extra: const row not found --额外信息