> 1) can you join a MyISAM table to an innodb table in a select?

Absolutely.


> 2) Under 'Restrictions...' in the manual, it says:
> When you restart the MySQL server, InnoDB may reuse an old 
> value for an
> AUTO_INCREMENT column.
> Under what circumstances does this occur?

If you perform an INSERT into an InnoDB table w/ an AUTO_INCREMENT
column, and for whatever reason the query fails (non-unique value in
some unique column, or whatever), the AUTO_INCREMENT counter will still
be incremented, despite the fact that the statement was rolled back.
This happens even if you do an INSERT IGNORE, and the value that's been
"eaten" will be returned by LAST_INSERT_ID() even though no row was
actually inserted.

Now, if I'm reading the documentation correctly, basically when you
start MySQL the InnoDB engine does a "SELECT MAX(auto_inc_column) FROM
... FOR UPDATE", and uses that to initialize the in-memory counter.  So
if the last thing that happened on a particular table before MySQL was
shut down was a bunch of failed INSERTs, you'll have received some
values which pointed to nothing at the time, but will wind up being
reused by InnoDB after the restart.


> 3) Are there any replication issues?

I have not encountered any InnoDB-specific replication issues.  If
anything, replication should be easier to deal with as you're guaranteed
to not have half a transaction be visible on the slave if the link is
severed...


> 4) Any issues regarding a mixed MyISAM/InnoDB environment 
> that we should
> worry about?

Just be real careful to not accidentally count on a ROLLBACK undoing
something in a MyISAM table...


> 5) Anyone who has done this in the past -- how much of a pain was it?

It's not a pain at all.  There are things you need to be aware of that
can bite you in the rear if you're looking for InnoDB's major benefits:
Multi-versioned row-level locking is really really great.  Finding out
that "INSERT INTO x SELECT ... FROM y" still acquires a table lock on y
is not so great.  That's fixed in recent 4.0.x releases I think, but you
get the idea.  Deadlocks are also quite irritating, and need to be
considered.

In general, I tend to use InnoDB for pretty much everything.  Assuming
that you use transactions wisely InnoDB seems to be substantially faster
for most operations than MyISAM (or at least, not noticably slower --
with a couple minor caveats, such as "SELECT COUNT(*) FROM x"), and it
definitely scales better to large numbers of simultaneous users.  Also,
you get the benefits of FOREIGN KEY constraints and what not.

There are a couple minor situations where InnoDB doesn't behave in a
manner similar to MyISM:  Having an AUTO_INCREMENT column as a secondary
column in a PRIMARY KEY.  If you do this in MyISAM, a separate counter
value is maintained for each unique prefix, but this is NOT the case
with InnoDB.  InnoDB of course does not support FULLTEXT indexes, and so
forth.

-JF


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to