MySQL 与数据库一起工作包含一个包含数百万行的表

标签 mysql sql database phpmyadmin database-administration

我不是 DBA,所以我想问你几个问题。

我的表中有 4800 万行,10 列。 在这些列中的 7 个上,我需要运行如下查询:

select * from `table1` WHERE `Flag` = '1' - 10 millions of rows (takes like 2 seconds) -  on Flag column i have INDEX 

select * from table WHERE `name` LIKE '%John%' - 10k results (takes like 10H) on `name column i have INDEX 

我在使用 LIKE 时遇到问题,我需要非常快地获得结果,甚至不需要等待 2 秒,在我的情况下需要 10 小时。

希望这里有人能帮帮我,谢谢大家。

最佳答案

Mysql 会在第一个通配符 (%) 之前使用你在 LIKE 上的索引。 因此,如果通配符是“seach-string”的第一个符号,则不会使用索引。

http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

LIKE 'John%' - 快 LIKE '%John%' - 慢

我相信你应该使用全文搜索

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

关于MySQL 与数据库一起工作包含一个包含数百万行的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32305509/

相关文章:

php - 为什么我的 MYSQLI DELETE 设置间隔函数未运行

MySQL简单行数增量计数器

sql - Postgres 根据客户端返回不同的结果

数据库设计: a 'code' table that get referenced by other entities

database - 在 Grails 中存储和编辑键/值对?

database - Azure SQL 数据库订阅

php - 获取所有需要解决的问题

php - PDO 查询未插入 - HY093 错误消息但绑定(bind)变量的数量正确

php - 使用 PHP 比较 2 个表并在另一个表上创建列表

mysql - MySQL 中何时使用单引号、双引号和反引号