In article <[EMAIL PROTECTED]>,
[EMAIL PROTECTED] writes:

>> CREATE TEMPORARY TABLE tbl1 (
>> id INT UNSIGNED NOT NULL,
>> val INT UNSIGNED,
>> PRIMARY KEY (id),
>> UNIQUE KEY (val)
>> );
>> 
>> INSERT INTO tbl1 (id, val) VALUES (1, 1);
>> INSERT INTO tbl1 (id, val) VALUES (2, 2);
>> INSERT INTO tbl1 (id, val) VALUES (3, 3);
>> INSERT INTO tbl1 (id, val) VALUES (4, 4);
>> 
>> SELECT * FROM tbl1;
>> 
>> DELETE FROM tbl1 WHERE id = 3;
>> 
>> INSERT INTO tbl1 (id, val) VALUES (5, 5);
>> 
>> SELECT * FROM tbl1;
>> 
>> The first SELECT happens to return 1/2/3/4, but the second one returns
>> for me 1/2/5/4.

> InnoDB would probably do this, but MyISAM probably woudl not.

Incorrect, at least for the MySQL server I tested.

> If it 
> chooses to do a fill table scan, it will deliver the results iht the 
> essentially random order it stores them. If it uses and index, it is qitel 
> likely to deliver them in the order of that index - which may not be the 
> primary key. Indeed, the optimiser theoretically might use different 
> indexes for the same query on different days, as the table cnages.

Yes.  I think the difference is not InnoDB vs MyISAM, but "SELECT
pkey" vs "SELECT pkey. someothercol".  In the first case the result
set can be built by just looking at the index (which is of course
sorted), whereas the second case also needs to look at the table
itself (which is unsorted).

> It is therefore *never* safe to assume any sort of ordering unless you 
> specify it.

That's what I wanted to emphasize.


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

Reply via email to