betway必威亚洲官网更改MYSQL数据库不区分大小写表名,Server优化方法有哪些

  今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢?

   mysql查询当天的所有信息:

  虽然查询速度慢的原因很多,但是如果通过一定的优化,也可以使查询问题得到一定程度的解决

  后来请教了一个老师才搞定,原来是LINUX下的MYSQL默认是要区分表名大小写的,哎,弄了那么旧,害死我了。

  代码如下

  查询速度慢的原因很多,常见如下几种:

  让MYSQL不区分表名大小写的方法其实很简单:

  select * from test where year(regdate)=year(now()) and
month(regdate)=month(now()) and day(regdate)=day(now())

  1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)

  1.用ROOT登录,修改/etc/my.cnf

  这个有一些繁琐,还有简单的写法:

  2.I/O吞吐量小,形成了瓶颈效应。

  2.在[mysqld]下加入一行:lower_case_table_names=1

  代码如下

  3.没有创建计算列导致查询不优化。

  3.重新启动数据库即可。

  select * from table where date(regdate) = curdate();

  4.内存不足

后来…

  另一种写法没测试过

  5.网络速度慢

  查询当天的记录

  6.查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)

  代码如下

  7.锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)

  select * from hb_article_view where TO_DAYS(hb_AddTime) =
TO_DAYS(NOW())

  8.sp_lock, sp_who, 活动的用户查看,原因是读写竞争资源。

  date()函数获取日期部分, 扔掉时间部分,然后与当前日期比较即可

  9.返回了不必要的行和列

  补充:本周、上周、本月、上个月份的数据

  10.查询语句不好,没有优化

  查询当前这周的数据

  可以通过如下方法来优化查询 :

  代码如下

  1.把数据、日志、索引放到不同的I/O设备上,增加读取速度,以前可以将Tempdb应放在RAID0上,SQL2000不再支持。数据量(尺寸)越大,提高I/O越重要。

  SELECT name,submittime FROM enterprise WHERE
YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now());

  2.纵向、横向分割表,减少表的尺寸(sp_spaceuse)

  查询上周的数据

  3.升级硬件

  代码如下

  4.根据查询条件,建立索引、优化索引、优化访问方式,限制结果集的数据量。注意填充因子要适当(最好是使用默认值0)。索引应该尽量小,使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段

  SELECT name,submittime FROM enterprise WHERE
YEARWEEK(date_format(submittime,’%Y-%m-%d’)) = YEARWEEK(now())-1;

  5.提高网速

  查询当前月份的数据

  6.扩大服务器的内存,Windows 2000和SQL server
2000能支持4-8G的内存。配置虚拟内存:虚拟内存大小应基于计算机上并发运行的服务进行配置。运行
Microsoft SQL Server 2000
时,可考虑将虚拟内存大小设置为计算机中安装的物理内存的 1.5
倍。如果另外安装了全文检索功能,并打算运行 Microsoft
搜索服务以便执行全文索引和查询,可考虑:将虚拟内存大小配置为至少是计算机中安装的物理内存的
3 倍。将 SQL Server max server memory 服务器配置选项配置为物理内存的 1.5
倍(虚拟内存大小设置的一半)。

  select name,submittime from enterprise where
date_format(submittime,’%Y-%m’)=date_format(now(),’%Y-%m’)

  7.增加服务器CPU个数,但是必须明白并行处理比串行处理更需要资源例如内存。使用并行还是串行程是MsSQL自动评估选择的。单个任务分解成多个任务,就可以在处理器上运行。例如耽搁查询的排序、连接、扫描和GROUP
BY字句同时执行,SQL
SERVER根据系统的负载情况决定最优的并行等级,复杂的需要消耗大量的CPU的查询最适合并行处理。但是更新操作UPDATE,INSERT,DELETE还不能并行处理。

  查询距离当前现在6个月的数据

  8.如果是使用like进行查询的话,简单的使用index是不行的,但是全文索引耗空间。
like ‘a%’ 使用索引,like ‘%a’ 不使用索引。用 like ‘%a%’
查询时,查询耗时和字段值总长度成正比,所以不能用CHAR类型,而是VARCHAR。对于字段的值很长的建全文索引。

  代码如下

  9.DB Server 和 Application Server 分离; OLTP和OLAP分离

  select name,submittime from enterprise where submittime between
date_sub(now(),interval 6 month) and now();

  10.分布式分区视图可用于实现数据库服务器联合体。联合体是一组分开管理的服务器,但它们相互协作分担系统的处理负荷。这种通过分区数据形成数据库服务器联合体的机制能够扩大一组服务器,以支持大型的多层
Web 站点的处理需要。

  查询上个月的数据

  1.在实现分区视图之前,必须先水平分区表

  代码如下

  2.在创建成员表后,在每个成员服务器上定义一个分布式分区视图,并且每个视图具有相同的名称。这样,引用分布式分区视图名的查询可以在任何一个成员服务器上运行。系统操作如同每个成员服务器上都有一个原始表的复本一样,但其实每个服务器上只有一个成员表和一个分布式分区视图。数据的位置对应用程序是透明的。

  select name,submittime from enterprise where
date_format(submittime,’%Y-%m’)=date_format(DATE_SUB(curdate(),
INTERVAL 1 MONTH),’%Y-%m’)

  11.重建索引DBCC REINDEX, DBCC INDEXDEFRAG, 收缩数据和日志DBCC
SHRINKDB, DBCC SHRINKFILE.
设置自动收缩日志。对于大的数据库不要设置数据库自动增长,它会降低服务器的性能。
在T-SQL的写法上有很大的讲究,下面列出常见的要点:

  select * from `user` where DATE_FORMAT(pudate,’%Y%m’) =
DATE_FORMAT(CURDATE(),’%Y%m’) ;

  首先,DBMS处理查询计划的过程是这样的:

  select * from user where
WEEKOFYEAR(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = WEEKOFYEAR(now())

  1. 查询语句的词法、语法检查

  select *

  2. 将语句提交给DBMS的查询优化器

  from user

  3. 优化器做代数优化和存取路径的优化

  where MONTH(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = MONTH(now())

  4. 由预编译模块生成查询规划

  select *

  5. 然后在合适的时间提交给系统处理执行

  from [user]

  6. 最后将执行结果返回给用户其次,看一下SQL
SERVER的数据存放的结构:一个页面的大小为8K(8060)字节,8个页面为一个盘区,按照B树存放。

  where YEAR(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = YEAR(now())

  12.Commit和rollback的区别。Rollback:回滚所有的事务;Commit:提交当前的事务。没有必要在动态SQL里写事务,如果要写请写在外面,如:
begin tran exec(@s) commit trans 或者将动态SQL 写成函数或者存储过程。

  and MONTH(FROM_UNIXTIME(pudate,’%y-%m-%d’)) = MONTH(now())

  13.在查询Select语句中用Where字句限制返回的行数,避免表扫描,如果返回不必要的数据,浪费了服务器的I/O资源,加重了网络的负担降低性能。如果表很大,在表扫描的期间将表锁住,禁止其他的联接访问表,否则后果严重。

  select *

  14.SQL的注释申明对执行没有任何影响。

  from [user]

  15.尽可能不使用光标,它占用大量的资源。如果需要row-by-row地执行,尽量采用非光标技术,如:在客户端循环,用临时表,Table变量,用子查询,用Case语句等等。

  where pudate between 上月最后一天

  游标可以按照它所支持的提取选项进行分类:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签:
网站地图xml地图