我有一个数据库,里面有很多广告帖子。当大小很小时,它工作得很好,但现在托管公司经常挂起我的帐户,因为我的数据库有超过100000行。他们告诉我,我的查询对我的桌子来说不再那么有效了。所以,我在网上做了一些搜索,找到索引可能是解决我的查询问题的一种方法。
这是我的网站的查询
$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
您可以发布创建索引的方式和查询结果,以提供更多信息。
-
这是MyISAM表格吗?如果是,请添加
(keytype, id)
索引。 -
如果您可以将
2000
限制降低到更合理的值,例如,如果您并不真正需要2000行,请降低该值。 -
你真的需要
SELECT
列表中的所有这些列吗?如果没有,请删除*
,只写下您需要的列。