Mysql没有使用任何索引

标签 mysql innodb mariadb

我有一个相当简单的查询,由于某种原因没有使用任何索引:

CREATE TABLE `events_self` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`date` int(10) unsigned NOT NULL,
`username` varchar(16) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`event` enum('status_update','follow_hashtag','make_hashtag','avatar','placeholder_3') CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`obj_id` varchar(140) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
`inline` varchar(255) CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`id`,`date`),
KEY `obj_id` (`obj_id`),
KEY `user_date` (`username`,`date`),
KEY `event` (`event`),
KEY `x` (`event`,`inline`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


INSERT INTO `events_self` (`id`, `date`, `username`, `event`, `obj_id`, `inline`) VALUES (1, 1358359266, 'aaa', 'make_hashtag', '1', 'scene');

SELECT inline FROM events_self  WHERE obj_id = 1;

EXPLAIN SELECT inline FROM events_self  WHERE obj_id = 1;


+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
| id | select_type | table       | type | possible_keys | key  | key_len | ref  | rows    | Extra       |
+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
|  1 | SIMPLE      | events_self | ALL  | obj_id        | NULL | NULL    | NULL | 1610702 | Using where |
+----+-------------+-------------+------+---------------+------+---------+------+---------+-------------+
1 row in set (0.00 sec)

服务器版本:5.3.2-MariaDB-beta-mariadb102~lenny-log (MariaDB - http://mariadb.com/)

我应该保留表/查询原样还是最好强制使用索引?

最佳答案

试试这个

EXPLAIN SELECT inline FROM events_self  WHERE obj_id = "1";

由于您发送了整数,MySql 将不会考虑索引,因为类型不同。

关于Mysql没有使用任何索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14378108/

相关文章:

mysql - 插入行时的竞争条件

mysql - 如何优化 InnoDB 内存参数以提高性能?

MySQL InnoDB 设计问题

MySQL/MariaDB : Store a datetime WITH timezone

php - 我可以将 SELECT 查询放入 MySQL 的 IF 语句中吗?

mysql - 选择一行匹配条件,如果没有,则选择第一个

javascript - node.js 和 mysql 如果数据库中有 1,我如何获得 2?

php - Ajax - 单击按钮时更新 div 标签

MySQL 用另一个字段的值覆盖值

MySQL InnoDB 表丢失,不计入数据库结构