老问题了,我目前用hibernate开发,使用native sql语言,但数据库超过50万条时,查询速度慢的让人
难以忍受,大约只有3万条/秒。
现在只有一张表,记录系统日志的,表定义如下
DROP TABLE IF EXISTS `traffic`.`syslog`;
CREATE TABLE  `traffic`.`syslog` (
  `syslog_id` int(10) unsigned NOT NULL auto_increment,
  `logcategory` varchar(45) NOT NULL,
  `securitylevel` varchar(45) NOT NULL,
  `action` varchar(45) NOT NULL,
  `type` varchar(45) NOT NULL,
  `srcip` varchar(45) NOT NULL,
  `dstip` varchar(45) NOT NULL,
  `srcport` varchar(45) NOT NULL,
  `dstport` varchar(45) NOT NULL,
  `protocol` varchar(45) NOT NULL,
  `message` varchar(500) NOT NULL,
  `createtime` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `ext1` varchar(45) default NULL,
  `ext2` varchar(45) default NULL,
  `ext3` varchar(45) default NULL,
  `device_id` int(10) unsigned default NULL,
  PRIMARY KEY  (`syslog_id`),
  KEY `FK_syslog_device_id` (`device_id`),
  CONSTRAINT `FK_syslog_device_id` FOREIGN KEY (`device_id`) REFERENCES `devices` (`device_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;现在表里面有100万条数据,如果多条查询,希望反应速度可以控制在10秒以内。
请问需要对数据库做哪些调整?
查询只是单表,不关联其他表,而且我没有建索引。

解决方案 »

  1.   

    查询只是单表,不关联其他表,而且我没有建索引。很简单,看来你自己已经意识到了,需要加一些索引!
    具体要加什么样的索引,哪些索引,需要根据你的select 查询语句而定。
      

  2.   

    你觉得慢的SQL语句是什么? 否则凭空猜测,只能提供一些大方向的意见给你。
      

  3.   

    ACMAIN_CHM 大哥顺便帮我也看一下我的贴子http://topic.csdn.net/u/20090715/10/331aa8e4-b9ed-43a7-976c-da73f4e43ea0.html?seed=381546394
      

  4.   

    建议楼主如下操作:
    1 createtime 上加索引
    2 删除外键,由程序去控制更新【外键很消耗数据库资源,不建议使用】
    3 到了两三百万就需要考虑分区或者是数据迁移
      

  5.   

    zjcdxx2000:不要一次返回太多的值,结果集分页显示或者使用AJAX当滚动条拖到底部的时候动态查询(可参考googel reader)。
      

  6.   

    Select * From cyclopedia Where ID>=(
    Select Max(ID) From (
    Select ID From cyclopedia Order By ID limit 90001
    ) As tmp) limit 100;========================================Select * From cyclopedia Where ID>=(Select ID From cyclopedia limit 90000,1)limit 100;速度明显改善,执行效率
    第一条查询 9万条 0.23 s   // 90万条2.45 s
    第二条查询 9万条 0.17 s   // 90万条1.55 s