J'ai une grande grande table (InnoDB) qui a essentiellement un nom de lieu avec la latitude et la longitude de l'emplacement. ma requête est quelque chose commeEffecient MySQL SELECT pour le texte dans les colonnes dans InnoDB
SELECT columns FROM table
WHERE latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
AND location LIKE '%mcdonalds%'
le seul index est l'index principal pour la colonne auto-incrémentée.
Je préfère utiliser InnoDB si FULLTEXT est pas une option
Une option que j'ai essayé a été l'ajout d'index à la latitude et la longitude, et faisant
SELECT id FROM table WHERE
latitude BETWEEN latMin AND latMax
AND longitude BETWEEN longMin AND longMax
alors je ne
$stringOfIds = implode(",",$result);
SELECT columns FROM table WHERE id IN ($stringOfIds)
AND location LIKE '%mcdonalds%'
Mais ce n'est pas très évolutif car le résultat $ peut avoir des milliers d'entrées et prend trop de mémoire
Pour l'instant, j'ai eu recours à une analyse de table complète (la première requête ci-dessus), mais cela prend de 0,5 à 1 seconde par requête, donc toute aide serait appréciée.
Merci
afaik, l'index de texte intégral ne nécessite pas de valeurs uniques –
Il n'y a rien sur un index de texte intégral qui nécessite des enregistrements par unique. C'est juste une façon de faire une recherche de texte plus efficace que 'comme'% blahblah% ''pourrait jamais l'être. Un index de texte intégral ne peut pas être unique dans tous les cas. Seul un index normal peut être rendu unique. –
Ah, j'ai compris. Mais je préfère utiliser InnoDB et InnoDb ne supporte pas FULLTEXT, non? –