I am reading `Effective Mysql - Optimizing Mysql Statements` and in `chapter 3` there was this explanation:

> 
> The secondary indexes in InnoDB use the B-tree data structure; however, they differ from the MyISAM implementation. **In InnoDB, the secondary index stores the physical value of the primary key.** In MyISAM, the secondary index stores a pointer to the data that contains the primary key value.
> 
> 
> This is important for two reasons. First, the size of secondary indexes in InnoDB can be much larger when a large primary key is defined—for example when your primary key in InnoDB is 40 bytes in length. As the number of secondary indexes increase, the comparison size of the indexes can become significant. The second difference is that the secondary index now includes the primary key value and ***is not required as part of the index.*** This can be a significant performance improvement with table joins and covering indexes.
> 
> 
> 

There are many questions that come to my mind, mostly due to lack of understanding of what author is trying to convey.

1. It is unclear what the author means in the second difference in
second paragraph. What ***is not required as part of index*** anymore?
2. Does InnoDB secondary index B-tree only store PK value or PK value
and Pointer to it? or PK Value and pointer to data row?
3. What kind of performance improvement would there be due to the storage method (2nd question's answer)?

[This](https://stackoverflow.com/questions/16024226/mysql-difference-in-index-usage-between-myisam-and-innodb) question contains an example and also an answer. He explains how it contains PK value, but what I am still not understanding is,

To complete the join, if the pointer is not there in the secondary index and only the value, wont MySQL do a full index scan on Primary Key index with that value from secondary index? How would that be efficient than having the pointer also?