0

我正在编写 SQL 查询,并且在查询中使用了 % 符号。例子:

SELECT * FROM TABLE A where state='NewYork%'

我的问题是在变量位置使用 % 如何影响 MySQL 的性能?它如何与索引一起使用?

Ex 1: SELECT * FROM TABLE A where state='NewYork%'

Ex 2: SELECT * FROM TABLE A where state='%NewYork'

Ex 3: SELECT * FROM TABLE A where state='%NewYork%'

Ex 4: SELECT * FROM TABLE A where state='New%York'
4

3 回答 3

3

如果您不使用LIKE运算符,则很可能%会被视为与任何其他字符相同。

于 2012-06-12T15:24:41.737 回答
1

foo LIKE 'abc%'如果您的查询看起来像或, MySQL 可以使用索引foo LIKE 'abc%def%'。它可以将索引用于第一个通配符之前的任何部分或字符串。如果您需要匹配字符串中任意位置的单词,您可能需要考虑使用FULLTEXT索引。

有关索引的更多详细信息:http: //dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

全文搜索:http ://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

在此处查看一些性能提示:http: //forge.mysql.com/wiki/Top10SQLPerformanceTips

于 2012-06-12T15:26:07.377 回答
0

我想你的意思是喜欢,

SELECT * FROM TABLE A where state like 'NewYork%'

Ex 1: SELECT * FROM TABLE A where state like 'NewYork%'

Ex 2: SELECT * FROM TABLE A where state like '%NewYork'

Ex 3: SELECT * FROM TABLE A where state like '%NewYork%'

Ex 4: SELECT * FROM TABLE A where state like 'New%York'

如果您的引擎是 MyIsam、Aria 或 Innodb(mysql 5.6+),最好的方法是在该字段上建立全文索引,现在谈论'%'(通配符)您的 4 个示例中的最佳性能将在:

Ex 1: SELECT * FROM TABLE A where state like 'NewYork%'

因为Mysql有一个单词列表,它会更快地识别以....开头的单词而不是以....结尾的单词。

于 2012-06-12T15:30:16.913 回答