我的Mysql个一个表中有170万记录,请问.. 能说说你的大致的表结构索引情况,查询的SQL,让大家看看,尽量以索引列为条件做查询,但象'%%'之类的like也没法使用索引的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 +---------+------------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+---------+------------------+------+-----+---------+----------------+| id | int(5) | | PRI | NULL | auto_increment || ip | varchar(15) | YES | | NULL | || dt | datetime | YES | MUL | NULL | || control | varchar(10) | YES | | NULL | || host | varchar(40) | YES | MUL | NULL | || url | text | YES | | NULL | || code | char(3) | YES | | NULL | || length | int(10) unsigned | YES | | NULL | |+---------+------------------+------+-----+---------+----------------+$sql = "select count(host) as count,host from test group by host order by count desc";结构和语句都在这里了,其实就算不是这样,我直接select * from test order by dt desc 也是很慢 重复值比较多的字段上建立索引也不怎么合适,在数据库量比较大的情况下,又要按照一个无索引字段统计并排序,速度慢也是没办法的事,毕竟要做那么多的运算,但实际上我觉得这种完全把所有数据查出来其意义并不大,那么多的数据,我们实际看的也就那么一点,所以可以用limit (offset),limitvalue ;来减少查询结果的行数,如果是在应用程序中,你完全可以这样一次查询比如20条,这样速度应该是比较快的,这也就是分页处理问题,既能提高速度,又避免了客户机的大量内存被占用,就是在客户端中你查上几百条也就够了,你实际要看的恐怕是很少的。查询方面可以从以下几个基本原则考虑:1.减少所读的行数2.避免排序3.减少所须排序的行数4.用简单的关键字排序 其实我已经limit了,在后面,哎,功能现在就是不想减少,没办法啊,如果还保持现在的形式,大伙有什么好建议吗? 除了索引等等优化手段,我想可能你要增加内存,增大mysql的缓存了如果你有1G内存专门给mysql用,我想速度应该有一定改善! SHOW CREATE TABLE test ;建议加 host 单独一个索引dt 单独一个索引 用哪种格式存的?InnoDB查询速度比较慢,MyISAM查询速度最快。 mysql游标里预处理 关于MySQL和MySQL-Front无法相连的问题 库名不同如何做复制 换数据库用phpmyadmin导入.sql文件出现“有可能您发现了SQL分析器的臭虫。” mysql sql有没有 单个字符的通配符 请教一条SQL语句字符串截取问题 打开mysql数据库问题. 还是乱码问题? 求一条SQL语句 请教一个语句 麻烦大家看看我的一个小问题(在线请求帮助) MySql如何导入大量数据?
| Field | Type | Null | Key | Default | Extra |
+---------+------------------+------+-----+---------+----------------+
| id | int(5) | | PRI | NULL | auto_increment |
| ip | varchar(15) | YES | | NULL | |
| dt | datetime | YES | MUL | NULL | |
| control | varchar(10) | YES | | NULL | |
| host | varchar(40) | YES | MUL | NULL | |
| url | text | YES | | NULL | |
| code | char(3) | YES | | NULL | |
| length | int(10) unsigned | YES | | NULL | |
+---------+------------------+------+-----+---------+----------------+$sql = "select count(host) as count,host
from test group by host
order by count desc";
结构和语句都在这里了,其实就算不是这样,我直接select * from test order by dt desc 也是很慢
1.减少所读的行数
2.避免排序
3.减少所须排序的行数
4.用简单的关键字排序
如果你有1G内存专门给mysql用,我想速度应该有一定改善!
建议加 host 单独一个索引
dt 单独一个索引