我有一个数据库与大量的广告张贴。它在大小很小时工作正常,但现在托管公司经常暂停我的帐户,因为我的数据库有超过10万行。他们告诉我,我的查询对我的桌子来说效率不高。所以,我做了一些在线搜索,并找到索引可能是一种解决我的查询问题的方法。MySQL查询优化器与索引
这里查询我的网站
$sql = "SELECT *
FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000";
的$美食将在类别访客选择改变的基础。我正在使用phpmyadmin,并且我想知道索引如何与上面的查询一起工作。我创建了cate列的索引,但不知道如何使用创建的索引来优化查询。
这里是我如何使用
EXPLAIN
SELECT *
FROM `adstable`
WHERE `keytype` = '".$cate."'
ORDER BY `adstable`.`id` DESC
LIMIT 2000
添加索引
ALTER TABLE `adstable` ADD INDEX ( `keytype`)
我得到了这样的事情:
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
在此先感谢。
当您选择*时,索引将帮助的唯一方法是如果索引位于表中的每个列上。但是如果你这样做了,我敢肯定你的主机不会那么喜欢......你需要缩小你选择的语句的范围,只包含你需要的那些字段。编辑您的问题以仅包含您需要的那些列,并且有人可以帮助您创建适当的索引。 – gangreen 2012-02-29 06:18:03
为什么你需要LIMIT 2000?当然你可以做更少的行吗?我无法想象你会在一个页面上投放2000个广告:) – Daan 2012-02-29 07:21:02