mysql - 大表中的正确索引

标签 mysql database indexing

我有一个包含 800 万条记录的表,如下所示:

CREATE TABLE `bdp_dosis` (
  `ID_INSTITUTION` varchar(4) NOT NULL default '',
  `ID_SERVICE` char(2) NOT NULL default '',
  `SECUENCIAL` char(3) NOT NULL default '',
  `TYPE` char(1) NOT NULL default '',
  `DATE_LECTURA` varchar(8) NOT NULL default '',
  `ID_TARJETA` varchar(9) default NULL,
  `DATE_ASIGNACION` varchar(8) NOT NULL default '',
  `DOSIS_1` int(11) default NULL,
  `DOSIS_2` int(11) default NULL,
  `COMMENT` char(1) NOT NULL default '',
  `CATEGORIA` char(2) default NULL,
  `TYPE_TRABAJO` char(2) default NULL,
  PRIMARY KEY  (`ID_INSTITUTION`, `ID_SERVICE`,`SECUENCIAL`, `TYPE`, `DATE_LECTURA`, `DATE_ASIGNACION`, `COMMENT`)) ENGINE=MyISAM

表的设计无法更改,但某些索引将使其在此查询中的性能不那么糟糕:

select d.ID_SERVICE,d.SECUENCIAL,d.TYPE,d.DATE_LECTURA,d.DATE_ASIGNACION,d.DOSIS_1,d.DOSIS_2,d.COMCOMMENT
from bdp_dosis d
where d.ID_INSTITUTION='46C7'
and d.DATE_asignacion>'20080100'
and d.DATE_asignacion<'20081232' and locate(d.COMMENT,'WQ')<>0
order by d.ID_SERVICE,d.SECUENCIAL,d.TYPE,d.fecha_lectura desc

解释命令说:

id  select_type  table  type  possible_keys  key      key_len  ref    
1   SIMPLE       d      ref   PRIMARY        PRIMARY  4        const  
rows    Extra
254269  Using where; Using filesort

我尝试在 ID_INSTITUTION-ID_SERVICE 处放置索引,但没有得到大结果。有什么想法吗?

最佳答案

ID_INSTITUTIONDATE_asignacion 上的按键更有可能提供帮助。

如果这仍然不能让您走得太远,您可能需要考虑转到 mysql 5.1 并使用 partitioning .

关于mysql - 大表中的正确索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1311472/

相关文章:

MySQL 选择 2 个或多个 id 的重复名称

mysql - 存储过程 - 需要使用 SELECT 语句的结果

php - 不使用联合表的Mysql跨服务器查询

mysql - ER 图不显示 Datagrip 中的关系

mysql - 优化包含 WHERE 和 ORDER BY 的 MySQL UPDATE 查询?

python - pandas.DatetimeIndex 频率为 None 且无法设置

mysql - 使用嵌套选择选择中间表中不存在的所有内容

MySQL Btree : Does cardinality and column order matters for a composite index when all columns are used?

android - 删除索引无法正常工作的SQlite Android

mysql - SQL如何引用变量列