php - 带索引的 MySQL 查询优化器

标签 php mysql phpmyadmin

我有一个包含大量广告发布的数据库。当它很小的时候它工作正常,但是现在托管公司经常暂停我的帐户,因为我的数据库有超过 100,000 行。他们告诉我我的查询对我的表来说不再那么有效了。所以,我在网上做了一些搜索,发现索引可能是解决我查询问题的一种方法。

这里是我网站的查询

$sql = "SELECT * 
        FROM `adstable` 
        WHERE `keytype` = '".$cate."' 
        ORDER BY `adstable`.`id` DESC 
        LIMIT 2000";

$cate 将根据访问者选择的类别进行更改。我正在使用 phpmyadmin,我想知道索引将如何与上面的查询一起使用。我已经为 cate 列创建了索引,但不知道如何使用我创建的索引优化查询。

这是我添加索引的方法

ALTER TABLE  `adstable` ADD INDEX (  `keytype` )

通过使用

EXPLAIN 
SELECT * 
FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000

我有这样的东西:

id | select_type | table  | type | possible_keys | key     | key_len | ref | rows | Extra
1  | SIMPLE  |adstable| ref  | keytype       | keytype |   38    |const|49392 | Using where; Using filesort

提前致谢。

最佳答案

如果 cate column 是指 keytype column,那么您的索引已被使用。您是否注意到查询有任何改进?要检查索引是否真的在该查询中使用,您可以运行以下查询:

EXPLAIN SELECT * FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000

您可以发布创建索引的方式和该查询的结果以提供更多信息。

关于php - 带索引的 MySQL 查询优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494359/

相关文章:

php - fatal error : Allowed memory size of 67108864 bytes exhausted

javascript - 单击时显示下一个 div

MySQL INSERT INTO 语法

MySQL - 使用选择查询更新

mysql - 如何删除phpmyadmin中的数据库记录?

mysql - 列的数据被截断

php - 如何使用 preg_match() 和 Yield(PHP 5.5 生成器语法)迭代正则表达式匹配?

php - 登录并绕过登录屏幕

java - 第 1 行 SQL 语法错误

来自三个表的 SQL 查询的 PHP 多数组 (JSON)