MySQL use both FULLTEXT and normal index I have a table like this:

    id  type    idElem  name      date  content  lang     state  
------  ------  ------  ------  ------  -------  ------  --------


When I run this query against it: 

SELECT 
  `contents`.* 
FROM
  `contents` 
WHERE `contents`.type = "files" 
  AND `contents`.name = "url" 
  AND `contents`.state = 2 
  AND MATCH(`contents`.content) AGAINST ("somewords")


Only the FULLTEXT index on content is used, not the one on type, idElem, name, state : 

    id  select_type  table     partitions  type      possible_keys  key     key_len  ref       rows  filtered  Extra                          
------  -----------  --------  ----------  --------  -------------  ------  -------  ------  ------  --------  -------------------------------
     1  SIMPLE       contents  (NULL)      fulltext  type,idx       idx     0        const        1      5.00  Using where; Ft_hints: sorted  


Why ?

Here's my table schema (with more than 300k rows):

CREATE TABLE `contents` (
  `id` int(11) NOT NULL,
  `type` varchar(35) NOT NULL,
  `idElem` int(11) NOT NULL,
  `name` varchar(35) NOT NULL,
  `date` int(11) NOT NULL,
  `content` longtext NOT NULL,
  `lang` varchar(3) DEFAULT NULL,
  `state` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;


ALTER TABLE `contents`
  ADD PRIMARY KEY (`id`),
  ADD KEY `type` (`type`,`idElem`,`name`,`state`);
ALTER TABLE `contents` ADD FULLTEXT KEY `idx` (`content`);


ALTER TABLE `contents`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
MySQL very rarely use more than 1 index per table in a query, and never intersect a FULLTEXT index with any other. 

Your plan show - for some reasons it choose FT as best choice for this query.


  Index Merge is not applicable to full-text indexes. We plan to extend
  it to cover these in a future MySQL release.


merge optimisation

edited after question:
You can change index 

KEY type (type,idElem,name,state);


to the - 

KEY type (type,name,state); 


and compare - MySQL could start use it, and depending from Your data it could be better (could be not). If MySQL continue use FT index only, You can make tests with index hints - FORCE INDEX ('type').

Remark for comment from Rick James:
not always, in case of range - yes (at least I have not other examples) and agree with You, 

but in case (AND = AND = AND =) as in original question (or search by PK) it could take index for direct search.

CREATE TABLE `t1` (
  `id` int(11) NOT NULL,
  `value` varchar(255) DEFAULT NULL,
  `text` varchar(2048) DEFAULT NULL,
  KEY `idx` (`id`,`value`),
  FULLTEXT KEY `text` (`text`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


populate and simple test:

select * from t1 where (id &gt;2 and id &lt; 4) and MATCH (text) AGAINST ('very')


as predicted by You:

1   SIMPLE  t1      fulltext    idx,text    text    0   const   1   11.11   Using where; Ft_hints: sorted


but:

select * from t1 where id =3  and value = '3' and MATCH (text) AGAINST ('very')


and it take other index:

1   SIMPLE  t1      ref idx,text    idx 262 const,const 1   11.11   Using where


so it always need - make and test