mysql - 简单有序的 MySQL 查询在大表上运行非常慢

标签 mysql select sql-order-by

我有一个包含约 1.500.000 条记录的表:

CREATE TABLE `item_locale` (
  `item_id` bigint(20) NOT NULL,
  `language` int(11) NOT NULL,
  `name` varchar(256) COLLATE utf8_czech_ci NOT NULL,
  `text` text COLLATE utf8_czech_ci)
  PRIMARY KEY (`item_id`,`language`),
  KEY `name` (`name`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci;

item_idlanguage 作为主键和 name 的索引,大小为 255。

使用以下查询:

select item_id, name from item_locale order by name limit 50;

虽然只需要 50 行,但选择事件大约需要 3 秒。

我能做些什么来加速这样的查询?

编辑:你们中的一些人建议添加一个索引。我在上面提到过,name 列的索引大小为 255。

我在命令上运行了 explain:

+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
| id | select_type | table         | type | possible_keys | key  | key_len | ref  | rows    | Extra          |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+
|  1 | SIMPLE      | item_locale | ALL  | NULL          | NULL | NULL    | NULL | 1558653 | Using filesort |
+----+-------------+---------------+------+---------------+------+---------+------+---------+----------------+

奇怪的是,它似乎没有使用任何索引......

最佳答案

检索 50 条记录也比较重。将它们限制为 10 因为您正在使用 Order by also..

关于mysql - 简单有序的 MySQL 查询在大表上运行非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980073/

相关文章:

php - 显示列与给定参数部分匹配的行

mysql - 如何更改外键的操作

java - 如何使用 context.xml 正确连接到 XAMPP mySQL DB

sql - 批量选择记录

javascript - 当复选框被选中/取消选中时触发函数?

SQL Case Order 按特定顺序

MySQL - 使用不在列表中的列按语句排序

Mysql订单号/字符组合

python - 打印 MySQLdb 运行的实际查询?

包含用户、角色和权限的 SQL SELECT 语句