I have a table with a list of words.
word VARCHAR(16)
I need to create a reverse index. ie. word "apple" would index as "elppa", word "banana" as "ananab" and so on.
Also, is it possible to index, say, a part of the word? Such as, skip the first/last 1 or 2 characters:
pple (apple) anana (banana)
are these things possible?
MySQL supports descending indexes: DESC in an index definition is no longer ignored but causes storage of key values in descending order. Previously, indexes could be scanned in reverse order but at a performance penalty. A descending index can be scanned in forward order, which is more efficient.
So the order of columns in a multi-column index definitely matters. One type of query may need a certain column order for the index. If you have several types of queries, you might need several indexes to help them, with columns in different orders.
MySQL can create composite indexes (that is, indexes on multiple columns). An index may consist of up to 16 columns. For certain data types, you can index a prefix of the column (see Section 8.3. 5, “Column Indexes”).
MySQL has three types of indexes: INDEX, UNIQUE (which requires each row to have a unique value), and PRIMARY KEY (which is just a particular UNIQUE index).
You can create an index on a field that's limited by prefix-length, meaning that only the first n characters will be considered, you can't do it with an arbitrary start and end position though. Read more about it on mysql's CREATE INDEX documentation page.
In this case I'd just make another column, use mysql's REVERSE function to fill it in and create an index on it, that way you get a field to search on for the reverse of the original word.
Other databases such as Postgresql allow you to index an expression, which would effectively allow you to index reverse(col_name)
without creating the extra column. So it it's possible, just not with mysql right now. (since version 9 potgresql has reverse() native I believe)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With