mysql - 多列索引比mysql中的单列索引慢

标签 mysql indexing

我有一个主键跨越 5 列的 myisam 表。我在这 5 列中的每一列上使用 WHERE 进行选择并进行了运算。使用主键(多列索引)需要 25 秒,在其中一列中使用单个索引需要 1 秒。我做了一个分析,大部分 25 秒是在“发送数据”阶段拍摄的。主键的基数约为 7M,单列约为 80。我错过了什么吗?

CREATE TABLE `mytable` (
  `a` int(11) unsigned NOT NULL,
  `b` varchar(2) NOT NULL,
  `c` int(11) unsigned NOT NULL,
  `d` varchar(560) NOT NULL,
  `e` varchar(45) NOT NULL,
  PRIMARY KEY (`a`,`e`,`d`,`b`,`c`),
  KEY `d` (`d`),
  KEY `e` (`e`),
  KEY `b` (`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


EXPLAIN SELECT * FROM mytable USE INDEX (PRIMARY)
WHERE a=12 AND e=1319677200 AND d='69.171.242.53' AND b='*' AND c=0;

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   ref PRIMARY PRIMARY 4   const   5912231 Using where


EXPLAIN SELECT * FROM mytable
WHERE a=12 AND e=1319677200 AND d='69.171.242.53' AND b='*' AND c=0;

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   ref PRIMARY,d,e,b   d   562 const   158951  Using where

最佳答案

问题是类型转换引起的,
尝试引用每个 varchar 列 b,d,e

SELECT * FROM mytable USE INDEX (PRIMARY)
WHERE a=12 AND e='1319677200' AND d='69.171.242.53' AND b='*' AND c=0;

关于mysql - 多列索引比mysql中的单列索引慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7925317/

相关文章:

mysql - 选择选项数组作为 select 语句的一部分

mysql - 计算一行中重复的列值

mysql - 加载前请求超时,有什么办法可以加快MySql查询的这个过程吗?

mysql - 关于比较两个索引 : (a, b) 和 (a)

mongodb - Mongoose 创建多个索引

database - Oracle - 索引似乎不起作用。还是慢

MySql数据库结构——外键逆向工程

mysql - 返回距当前日期一年多以前的日期的 SQL 查询

php - 汇总表格的两列并显示在html表格中

java - 如何获取我不知道的数组的索引?