sql >> Database >  >> RDS >> Mysql

Waarom gebruikt MySQL geen van deze mogelijke sleutels?

Een ander probleem dat u mogelijk tegenkomt, is een niet-overeenkomend gegevenstype. Als uw kolom bijvoorbeeld een tekenreeksgegevenstype is (CHAR, bijvoorbeeld) en uw zoekopdracht geen getal aanhaalt, zal MySQL de index niet gebruiken.

SELECT * FROM tbl WHERE col = 12345; # No index
SELECT * FROM tbl WHERE col = '12345'; # Index

Bron:heb vandaag hetzelfde probleem bestreden en op de harde manier geleerd op MySQL 5.1. :)

Bewerken:aanvullende informatie om dit te verifiëren:

mysql> desc das_table \G
*************************** 1. row ***************************
  Field: das_column
   Type: varchar(32)
   Null: NO
    Key: PRI
Default: 
  Extra: 
*************************** 2. row ***************************
[SNIP!]

mysql> explain select * from das_table where das_column = 189017 \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: das_column
         type: ALL
possible_keys: PRIMARY
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 874282
        Extra: Using where
1 row in set (0.00 sec)

mysql> explain select * from das_table where das_column = '189017' \G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: das_column
         type: const
possible_keys: PRIMARY
          key: PRIMARY
      key_len: 34
          ref: const
         rows: 1
        Extra: 
1 row in set (0.00 sec)


  1. Datum (jjjj/mm/dd) extraheren uit een tijdstempel in PostgreSQL

  2. Geïntegreerd transportgegevensmodel

  3. BESTELLEN OP RAND() alternatief

  4. Een entiteitsveld toewijzen waarvan de naam een ​​gereserveerd woord is in JPA