Zwei Abfragen zum Vergleich:
mysql> explain select * from orm where oid='10000';
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | orm | ref | PRIMARY,oid | PRIMARY | 302 | const | 23 | Using where |
+----+-------------+-------+------+---------------+---------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> explain select * from orm where oid=10000;
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
| 1 | SIMPLE | orm | ALL | PRIMARY,oid | NULL | NULL | NULL | 310000 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------------+
1 row in set (0.00 sec)
Mit der ersten Abfrage wird der key oid genutzt, oid ist gequoted und entspricht somit dem Datentype oid VARCHAR. Der key oid wird genutzt, so explain: auf den key werden 32 rows geliefert.
Nun habe ich in meinem Statement den Platzhalter für oid like this:
my $q = qq(
SELECT att, val FROM $self->{TABLE}
WHERE oid=?
);
Meine Frage ist: Wird der key oid hier auch wirklich genutzt, wie kriege ich das raus? Es scheint der Fall zu sein, die Abfrage ist performant, aber ich möchte es genau wissen ;)