Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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
MySQL不使用索引_Mysql_Indexing_Filesort - Fatal编程技术网

MySQL不使用索引

MySQL不使用索引,mysql,indexing,filesort,Mysql,Indexing,Filesort,我有一张桌子: CREATE TABLE IF NOT EXISTS `TxtDila` ( `ID` int(11) NOT NULL AUTO_INCREMENT, ... `Datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, ... PRIMARY KEY (`ID`), KEY `Datum` (`Datum`), ... FULLTEXT KEY `Titulek` (`Titulek`,`Anotace`,`T

我有一张桌子:

CREATE TABLE IF NOT EXISTS `TxtDila` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
...
  `Datum` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
...
  PRIMARY KEY (`ID`),
  KEY `Datum` (`Datum`),
...
  FULLTEXT KEY `Titulek` (`Titulek`,`Anotace`,`Txt`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
当我跑步时: 按数据说明从TxtDila使用索引(数据)顺序中选择ID

我得到:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  TxtDila ALL NULL    NULL    NULL    NULL    214603  Using filesort
即使我尝试 解释从TxtDila使用索引(数据)中按数据顺序选择ID 我可以看到文件排序

表有200000条记录,大约700MB。我有全文索引

有人能帮我吗?
谢谢你

全文索引实际上并不是用于普通查询的索引…只是用于全文搜索(因此是名称)

此外,在本例中,由于正在进行排序,因此会获得文件排序


您不在id上使用主键索引,因为您没有以任何方式限制您的查询-此查询将始终返回整个表。

您正在尝试读取200000条记录的id字段(整个表)。索引
Datum
不包括ID字段,因此无论您采用何种方式,这都将涉及从光盘读取ID字段。您告诉MySQL使用数据索引对记录进行排序,然后读取它们。这几乎意味着从光盘上读取多达200000次。MySQL决定(正确地)只需在一次大读取中读取表中的所有
(ID,datum)
对,并在内存中对它们进行排序,就可以减少工作量


我建议将
Datum
索引设置为
(Datum,ID)

上的多列索引,当查询中有
WHERE
子句时,通常使用
索引。另一种方法是使用
SELECT。。。强制索引
语法。您可以在这里阅读:

正如建议的那样,您需要多列索引,因为MyISAM不像InnoDB那样自动在索引中包含主键。@Marcus,谢谢您的指针。我不是硬盘访问策略方面的专家,所以seeks/reads/etc对我来说略胜一筹。同意如果表是InnoDB,就不会有问题。