sql优化

Oracle学习

試著忘記壹切 提交于 2020-03-16 10:15:11
http://www.fwvv.net/info/2008/07/01/20080701-63249.shtml 1. 求当前会话的SID,SERIAL# SELECT Sid, Serial# FROM V$session WHERE Audsid = Sys_Context( ' USERENV ' , ' SESSIONID ' ); 2. 查询session的OS进程ID Code SELECT p.Spid "OS Thread", b.NAME "Name - User ", s.Program, s.Sid, s.Serial#,s.Osuser, s.Machine FROM V$process p, V$session s, V$bgprocess b WHERE p.Addr = s.Paddr AND p.Addr = b.Paddr And (s.sid =& 1 or p.spid =& 1 ) UNION ALL SELECT p.Spid "OS Thread", s.Username "Name - User ", s.Program, s.Sid,s.Serial#, s.Osuser, s.Machine FROM V$process p, V$session s WHERE p.Addr = s.Paddr And (s.sid =& 1 or

sql语句查询经纬度范围

混江龙づ霸主 提交于 2020-03-16 04:19:05
指定一个经纬度,给定一个范围值(单位:千米),查出在经纬度周围这个范围内的数据。 经度:113.914619 纬度:22.50128 范围:2km longitude为数据表经度字段 latitude为数据表纬度字段 SQL在mysql下测试通过,其他数据库可能需要修改 SQL语句如下: select * from location where sqrt( ( ((113.914619-longitude)*PI()*12656*cos(((22.50128+latitude)/2)*PI()/180)/180) * ((113.914619-longitude)*PI()*12656*cos (((22.50128+latitude)/2)*PI()/180)/180) ) + ( ((22.50128-latitude)*PI()*12656/180) * ((22.50128-latitude)*PI()*12656/180) ) )<2 MySQL性能调优 – 使用更为快速的算法进行距离 最近遇到了一个问题,通过不断的尝试最终将某句原本占据近1秒的查询优化到了0.01秒,效率提高了100倍. 问题是这样的,有一张存放用户居住地点经纬度信息的MySQL数据表,表结构可以简化 为:id(int),longitude(long),latitude()long.

学会数据库读写分离、分表分库——用Mycat,这一篇就够了!

≡放荡痞女 提交于 2020-03-15 22:47:37
系统开发中,数据库是非常重要的一个点。除了程序的本身的优化,如:SQL语句优化、代码优化,数据库的处理本身优化也是非常重要的。主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。Mycat是一个广受好评的数据库中间件,已经在很多产品上进行使用了。希望通过这篇文章的介绍,能学会Mycat的使用。 安装 Mycat官网: http://www.mycat.io/ 可以了解下Mycat的背景和应用情况,这样使用起来比较有信心。 Mycat下载地址: http://dl.mycat.io/ 官网有个文档,属于详细的介绍,初次入门,看起来比较花时间。 下载: 建议大家选择 1.6-RELEASE 版本,毕竟是比较稳定的版本。 安装: 根据不同的系统选择不同的版本。包括linux、windows、mac,作者考虑还是非常周全的,当然,也有源码版的。(ps:源码版的下载后,只要配置正确,就可以正常运行调试,这个赞一下。) Mycat的安装其实只要解压下载的目录就可以了,非常简单。 安装完成后,目录如下: 目录 说明 bin mycat命令,启动、重启、停止等 catlet catlet为Mycat的一个扩展功能 conf Mycat 配置信息,重点关注 lib Mycat引用的jar包,Mycat是java开发的 logs 日志文件,包括Mycat启动的日志和运行的日志。 配置

oracle的commit详解

北城以北 提交于 2020-03-15 17:30:14
转:https://blog.csdn.net/hzhsan/article/details/9719307 它执行的时候,你不会有什么感觉。commit在数据库编程的时候很常用,当你执行DML操作时,数据库并不会立刻修改表中数据,这时你需要commit,数据库中的数据就立刻修改了,如果在没有commit之前,就算你把整个表中数据都删了,如果rollback的话,数据依然能够还原。听我这么说,你或许感觉commit没什么用,其实不然。当你同时执行两条或两条以上的sql语句时,问题就出现了。举一个例子,你去银行转账,你转的时候银行的数据库会update你银行账户里面的数据,同时对另一个人得账户也进行update操作。这两个程序都必须全部正确执行,才能commit,否则rollback。如果只是完成一条,要么你郁闷,要么银行郁闷,第一种情况是,你的账户的钱没少,转账人得账户上的钱多了,银行郁闷了。第二种情况你的银行账户的钱少了,他的却没多,你就好郁闷了。Oracle好好学吧!sql不难,plsql努努力也能熬过去,等到优化那,哎!DBA不是那么好当的。还有就是commit算是显式提交,还有隐式提交,并不是,不commit的话,你的全部努力就都白费了。 这个命令是将数据写到数据库中。如果不执行COMMIT这个命令

MySQL数据库优化(二)

别来无恙 提交于 2020-03-15 06:39:08
索引 索引是通过 BTREE 结构进行数据检索的,以平衡二叉树检索的方式缩短数据查询的时间。 索引类型 主键索引(primary),在innodb存储引擎下,由于数据和索引都在ibd文件里存储,所以数据的组织方式是由主键索引的 BTREE 结构,即聚簇索引,如果表没有主键系统会查找一列唯一数据列当主键,如果还没有唯一数据列,系统则虚拟主键索引。在innodb存储引擎下,其他索引都引用主键索引的地址,即非聚簇索引。 mysql> create table t1(id int primary key); #或 mysql> alter table t2 add primary key(id); 普通索引(normal) mysql> create index idx_name on t1(name); 唯一索引(unique) mysql> create table t1(id int unique); 全文索引(full)   由于MySQL默认的全文索引对中文的支持不好,所以通常使用别他工具来实现,比如:sphinx 或 coreseek 查询索引 mysql> show keys from table_name; mysql> show index from table_name; 删除索引 mysql> alter table table_name drop index

LNMP安装与配置

≯℡__Kan透↙ 提交于 2020-03-15 06:25:00
Nginx 与apache 、lighttp 性能综合对比,如下图: 注意:关闭 rpm 默认安装的 apache 和 mysql 1. 准备php 函数的rpm 包 yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers 2. 准备lnmp 其他的源代码包 wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.8.46.tar.gz wget http://blog.s135.com/soft/linux/nginx

MySQL性能优化(一):优化方式

若如初见. 提交于 2020-03-14 12:49:34
原文: MySQL性能优化(一):优化方式 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/vbirdbest/article/details/81047715 一:简介 MySQL性能优化是通过优化各个方面的,不仅仅是优化SQL语句这一方面,而是通过各各方面的优化,每个地方优化一些,这样整体性能就会有明显的提升。 二:优化方式 1. 优化数据库表结构的设计 为什么数据库表的设计会影响性能? 字段的数据类型:不同的数据类型的存储和检索方式不同,对应的性能也不同,所以说要合理的选用字段的数据类型。比如人的年龄用无符号的unsigned tinyint即可,没必要用integer 数据类型的长度:数据库最终要写到磁盘上,所以字段的长度也会影响着磁盘的I/O操作,如果字段的长度很大,那么读取数据也需要更多的I/O, 所以合理的字段长度也能提升数据库的性能。比如用户的手机号11位长度,没必要用255个长度。 表的存储引擎:常用的存储引擎有MyISAM、InnoDB、Memory,不同的存储引擎拥有不同的特性,所以要合理的利用每种存储引擎的长处和优点来提供数据的性能。MyISAM不支持事务,表级锁,但是查询速度快,InnoDB支持事务,行锁。 2. SQL优化

mysql-笔记 架构

点点圈 提交于 2020-03-14 09:42:17
1 第一层:连接处理、授权认证、安全 2 第二层:内置函数、解析、优化、跨存储引擎的功能:存储过程、触发器、视图 3 第三层:数据在存储和提取,底层函数(如开始事务)不解析sql、存储引擎之间不相互通信,只响应上层 客户端连接到服务器-需要认证:用户、原始主机、密码-然后验证特定操作权限 优化器:会请求存储引擎提供容量或某个具体操作的开销信息以及表数据的统计信息,在解析查询之前服务器会先检查查询缓存query cache,如果能找到,服务器就不必再执行查询解析、优化和执行 的整个过程,直接返回查询缓存中的结果集 并发控制:多个查询需要同一时间修改数据 使用锁防止数据损坏,但不支持并发处理 锁有:共享锁、排他销 也叫 读锁 、写锁 读锁是共享的,相互不阻塞 写锁是排他的,会阻塞其他的写锁和读锁 锁策略:在锁的开销和数据的安全性之间寻求平衡。每种mysql存储引擎都可以实现自己的锁策略和锁粒度。 表锁:table lock ,mysql中最基本的锁策略,且开销最小的锁策略      写操作前需要先获得写锁,这会阻塞其他用户对该表的所有读写操作      读锁之间是不相互阻塞的      写锁比读锁有更高的优先级     尽管存储引擎可以管理自己的锁,mysql本身还是会使用各种有效的表锁来实现 不同的目的。例如:服务器会为alter table之类的操作语句使用表锁   行级锁

MySQL 查询优化

99封情书 提交于 2020-03-14 09:41:14
1、MySQL 查询统计数据表行数三种方式:select count(*) 、select count(1) 、select count(具体字段),三者查询效率是怎么样的呢? 解答: 在MySQL InnoDB 存储引擎中,count(*) 和count(*) 都是对所有结果进行count。如果有where 子句,则是对所有筛选条件的数据行进行统计;如果没有where子句,则是对数据表的数据行数进行统计。 因此count(*) 和 count(1) 本质上并没有区别,执行的复杂度都是O(N),也就是采用全表扫描,进行循环+计数的方式进行统计。 如果是MySQL MyISAM 存储引擎,统计数据表的行数只需要O(1)的复杂度,这是因为每张MyISAM的数据表都有一个meta信息存储了row_count值,而一致性则由表级锁来保证,因为InnoDB支持事务,采用行级锁和MVCC机制,所以无法像MyISAM一样,只维护一个row_count变量,因此采用扫描全表,进行循环+计数的方式来完成统计; 在执行过程中,count(*) 和 count(1)执行时间略有差别,不过效率可以基本看成是相等的。 一般情况,三者的执行效率count(1) = count(*) >count(字段)。我们尽量使用count(*),当然如果你知道你要统计的是某个字段的非空数据行数,则另当别论

mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

ⅰ亾dé卋堺 提交于 2020-03-14 08:29:25
一、mysqlcheck 进行表的检查和修复 1、检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database table -c #检查单个表是否损坏 #mysqlcheck -uuser -ppassword database -c #检查整个库那些表损坏 2、首先检查数据库的那些表损坏,如果能定位到那张表损坏可以直接对表修复 #mysqlcheck -uuser -ppassword database table -r # 修复数据表 #mysqlcheck -uuser -ppassword database -r # 修复整个数据库 二、myisamchk 修复mysql表 Myisamchk是MyISAM表维护的一个非常实用的工具。可以使用myisamchk实用程序来获得有关数据库表的信息或检查、修复、优化他们。myisamchk适用MyISAM表(对应.MYI和.MYD文件的表)。 Myisamchk 选项解释 –debug=debug_options, -# debug_options 输出调试记录文件。debug_options字符串经常是’d:t:o,filename’。 –silent,-s 沉默模式。仅当发生错误时写输出。 –wait, -w 如果表被锁定,不是提示错误终止,而是在继续前等待到表被解锁。