Ⅰ linux怎么启动mysql服务器
Linux启动Mysql服务器的方法:
1、查看mysql版本
方法一:status;
方法二:select version();
2、Mysql启动常用命令
(1)、使用 service 启动:
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]# service mysql start (5.5.7版本是mysql)
(2)、使用 mysqld 脚本启动:
/etc/inint.d/mysqld start
(3)、使用 safe_mysqld 启动:
safe_mysqld&
Ⅱ 几个常用的MySQL性能测试工具
1、mysqlslap
安装:简单,装了mysql就有了
作用:模拟并发测试数据库性能。
优点:简单,容易使用。
不足:不能指定生成的数据规模,测试过程不清楚针对十万级还是百万级数据做的测试,感觉不太适合做综合测试,比较适合针对既有数据库,对单个sql进行优化的测试。
使用方法:
可以使用mysqlslap --help来显示使用方法:
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
--concurrency代表并发数量,多个可以用逗号隔开,concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。
--engines代表要测试的引擎,可以有多个,用分隔符隔开。
--iterations代表要运行这些测试多少次。
--auto-generate-sql 代表用系统自己生成的SQL脚本来测试。
--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)
--number-of-queries 代表总共要运行多少次查询。每个客户运行的查询数量可以用查询总数/并发数来计算。
--debug-info 代表要额外输出CPU以及内存的相关信息。
--number-int-cols :创建测试表的 int 型字段数量
--auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始
--number-char-cols 创建测试表的 char 型字段数量。
--create-schema 测试的schema,MySQL中schema也就是database。
--query 使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。
--only-print 如果只想打印看看SQL语句是什么,可以用这个选项。
mysqlslap -umysql -p123 --concurrency=100 --iterations=1 --auto-generate-sql --auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed --engine=myisam --number-of-queries=10 --debug-info
或:
指定数据库和sql语句:
mysqlslap -h192.168.3.18 -P4040 --concurrency=100 --iterations=1 --create-schema='test' --query='select * from test;' --number-of-queries=10 --debug-info -umysql -p123
要是看到底做了什么可以加上:--only-print
Benchmark
Average number of seconds to run all queries: 25.225 seconds
Minimum number of seconds to run all queries: 25.225 seconds
Maximum number of seconds to run all queries: 25.225 seconds
Number of clients running queries: 100
Average number of queries per client: 0
以上表明100个客户端同时运行要25秒
2、sysbench
安装:
可以从http://sourceforge.net/projects/sysbench/ 下载
tar zxf sysbench-0.4.12.tar.gz
cd sysbench-0.4.12
./autogen.sh
./configure && make && make install
strip /usr/local/bin/sysbench
安装时候可能会报错,后来发现个好文 http://blog.csdn.net/icelemon1314/article/details/7004955 怕以后找不到,也贴过来吧
1.如果mysql不是默认路径安装,那么需要通过指定--with-mysql-includes和--with-mysql-libs参数来加载mysql安装路径
2.如果报错:
../libtool: line 838: X--tag=CC: command not found
../libtool: line 871: libtool: ignoring unknown tag : command not found
../libtool: line 838: X--mode=link: command not found
../libtool: line 1004: *** Warning: inferring the mode of operation is deprecated.: command not found
../libtool: line 1005: *** Future versions of Libtool will require --mode=MODE be specified.: command not found
../libtool: line 2231: X-g: command not found
../libtool: line 2231: X-O2: command not found
那么执行下根目录的:autogen.sh文件,然后重新configure && make && make install
3.如果报错:
sysbench: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
那么执行下:
n -s /usr/local/mysql5.5/mysql/lib/libmysqlclient.so.18 /usr/lib64/
4.如果执行autogen.sh时,报如下错误:
./autogen.sh: line 3: aclocal: command not found
那么需要安装一个软件:
yum install automake
然后需要增加一个参数:查找: AC_PROG_LIBTOOL 将其注释,然后增加AC_PROG_RANLIB
作用:模拟并发,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。数据库目前支持MySQL/Oracle/PostgreSQL
优点:可以指定测试数据的规模,可以单独测试读、写的性能,也可以测试读写混合的性能。
不足:测试的时候,由于网络原因,测试的非常慢,但是最终给的结果却很好,并发支持很高,所以给我的感觉是并不太准确。当然也可能我没搞明白原理
使用方法:
准备数据
sysbench --test=oltp --mysql-table-engine=myisam --oltp-table-size=400000 --mysql-db=dbtest2 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd prepare
执行测试
sysbench --num-threads=100 --max-requests=4000 --test=oltp --mysql-table-engine=innodb --oltp-table-size=400000 --mysql-db=dbtest1 --mysql-user=root --mysql-host=192.168.1.101 --mysql-password=pwd run
sysbench 0.4.12: multi-threaded system evaluation benchmark
No DB drivers specified, using mysql
Running the test with following options:
Number of threads: 100
Doing OLTP test.
Running mixed OLTP test
Using Special distribution (12 iterations, 1 pct of values are returned in 75 pct cases)
Using "BEGIN" for starting transactions
Using auto_inc on the id column
Maximum number of requests for OLTP test is limited to 4000
Threads started!
Done.
OLTP test statistics:
queries performed:
read: 56014
write: 20005
other: 8002
total: 84021
transactions: 4001 (259.14 per sec.)
deadlocks: 0 (0.00 per sec.)
read/write requests: 76019 (4923.75 per sec.)
other operations: 8002 (518.29 per sec.)
Test execution summary:
total time: 15.4393s
total number of events: 4001
total time taken by event execution: 1504.7744
per-request statistics:
min: 33.45ms
avg: 376.10ms
max: 861.53ms
approx. 95 percentile: 505.65ms
Threads fairness:
events (avg/stddev): 40.0100/0.67
execution time (avg/stddev): 15.0477/0.22
3、tpcc-mysql
安装:
如果从原网站上下载源码比较麻烦,需要工具、注册、生成证书等。这里提供一个下载包http://blog.chinaunix.net/blog/downLoad/fileid/8532.html
export C_INCLUDE_PATH=/usr/include/mysql
export PATH=/usr/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/mysql
cd /tmp/tpcc/src
make
然后就会在 /tmp/tpcc-mysql 下生成 tpcc 命令行工具 tpcc_load 、 tpcc_start
作用:测试mysql数据库的整体性能
优点:符合tpcc标准,有标准的方法,模拟真实的交易活动,结果比较可靠。
不足:不能单独测试读或者写的性能,对于一些以查询为主或者只写的应用,就没有这么大的意义了。
使用方法:
加载数据
创建库
mysql>create database tpcc10;
创建表:
shell>mysql tpcc10 < create_table.sql
添加外键:
shell>mysql tpcc10 < add_fkey_idx.sql
加载数据:
1、单进程加载:
shell>./tpcc_load 192.168.11.172 tpcc10 root pwd 300
|主机||数据库||用户||密码||warehouse|
2、并发加载:(推荐,但需要修改一下)
shell>./load.sh tpcc300 300
|数据库||warehouse|
3、测试
./tpcc_start -h192.168.11.172 -d tpcc -u root -p 'pwd' -w 10 -c 10 -r 10 -l 60 -i 10 -f /mnt/hgfs/mysql/tpcc100_2013522.txt
***************************************
*** ###easy### TPC-C Load Generator ***
***************************************
option h with value '192.168.11.172'
option d with value 'tpcc'
option u with value 'root'
option p with value 'pwd'
option w with value '1'
option c with value '100'
option r with value '120'
option l with value '60'
option i with value '10'
option f with value '/mnt/hgfs/mysql/tpcc100_2013522.txt'
<Parameters>
[server]: 192.168.11.172
[port]: 3306
[DBname]: tpcc
[user]: root
[pass]: pwd
[warehouse]: 1
[connection]: 100
[rampup]: 120 (sec.)
[measure]: 60 (sec.)
RAMP-UP TIME.(120 sec.)
MEASURING START.
Ⅲ 如何小鸟云服务器 上lamp 环境 mysql的访问地址
对于PHP入门用户来说,我们只要掌握基本的数据库写入、读取、编辑、删除等基本的操作就算入门,也可以写出简单的程序出来,比如留言本、新闻文章系统等等。 在整个过程中,MySQL数据库的连接也是比较重要的,可以使用多种方法进行连接,对于新手来说我们就不要去分析哪种方式对于系统资源的优化程度,我们先能连接上就行。
这里,整理几种常用的PHP连接MySQL数据库的方法。
常用普通方法
$mysql_server="localhost";
$mysql_username="数据库用户名";
$mysql_password="数据库密码";
$mysql_database="数据库名";
//建立数据库链接
$conn = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die("数据库链接错误");
//选择某个数据库
mysql_select_db($mysql_database,$conn);
mysql_query("set names 'utf8'");
//执行MySQL语句
$result=mysql_query("SELECT id,name FROM 数据库表");
//提取数据
$row=mysql_fetch_row($result);
在提取数据的时候,我们使用mysql_fetch_row,还可以使用mysql_fetch_assoc和mysql_fetch_array,具体的我们参考手册。
面向对象方法
$db=new mysqli($dbhost,$username,$userpass,$dbdatabase);
if(mysqli_connect_error()){
echo 'Could not connect to database.';
exit;
}
$result=$db->query("SELECT id,name FROM user");
$row=$result->fetch_row();
PDO方法
$dsn='mysql:host='.$dbhost.';dbname='.$dbdatabase.';'
$dbh=new PDO($dsn,$username,$userpass);
$stmt=$dbh->query('SELECT id,name FROM user');
$row=$stmt->fetch();
以上是常用的3种PHP连接MySQL数据库的方法,我们可以尝试使用,一般我们用第一种比较多。
Ⅳ mysql 无法启动的几种常见问题
1、情况一:MySQL的错误日志文件(安装目录\MYOA\data5\机器名.err)会记录如下内容:
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Error: trying to add tablespace 460 of name '.\td_oa\flow_data_35.ibd'
InnoDB: to the tablespace memory cache, but tablespace
InnoDB: 460 of name '.\td_oa\exam_data.ibd' already exists in the tablespace
解决方法:
1)剪切出安装目录\MYOA\data5\TD_OA的flow_data_35.ibd和flow_data_35.frm两个文件;
2)启动MySQL5_OA服务,使用备份的flow_data_35.sql导入到TD_OA库中。如果提示flow_data_35表已经存在不能导入,则继续按后续步骤执行;
3)在data5下手动建立tmp目录;
4)使用MySQL管理工具或MySQL命令行程序在tmp下建立名称为flow_data_35的表(包含一个字段即可);
5)将tmp下的flow_data_35.frm和flow_data_35.ibd拷贝到安装目录\MYOA\data5\TD_OA目录下;
6)在MySQL管理工具或MySQL命令行程序中,进入TD_OA库,使用“drop table flow_data_35;”命令清除公共表空间中残留的flow_data_35表的相关信息;
7)进入tmp库,删掉flow_data_35表;
8)使用备份的flow_data_35.sql导入到TD_OA库中;
9)如果还有其他表存在该问题,可重复执行4至8步骤。
2、情况二:MySQL的错误日志文件(安装目录\MYOA\data5\机器名.err)会记录如下内容:
130409 15:54:31 [Note] Plugin 'FEDERATED' is disabled.
130409 15:54:31 InnoDB: The InnoDB memory heap is disabled
130409 15:54:31 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130409 15:54:31 InnoDB: Compressed tables use zlib 1.2.3
130409 15:54:32 InnoDB: Initializing buffer pool, size = 1023.0M
InnoDB: VirtualAlloc(1086849024 bytes) failed; Windows error 8
130409 15:54:32 InnoDB: Completed initialization of buffer pool
130409 15:54:32 InnoDB: Fatal error: cannot allocate memory for the buffer pool
130409 15:54:32 [ERROR] Plugin 'InnoDB' init function returned error.
130409 15:54:32 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130409 15:54:32 [ERROR] Unknown/unsupported storage engine: Innodb
130409 15:54:32 [ERROR] Aborting
解决方法:
此情况出现的原因是myoa\mysql5\my.ini中innodb_buffer_pool_size的值太大,OA服务器操作系统不支持所致。改小后再启动mysql5_OA服务即可,一般保持和数据库大小一致。数据库大小即是myoa/data5的大小。
3、情况三:mysql服务启动不了,事件查看器中显示:The syntax '--log-slow-queries' is deprecated and will be removed in a future release. Please use '--slow-query-log'/'--slow-query-log-file' instead.
解决方法:安装目录\MYOA\data5下的ibdata1、ib_logfile0、ib_logfile1文件属性被设置为只读导致,取消只读控制,重启mysql5_OA服务即可。
4、情况四:MySQL的错误日志文件(data5\机器名.err)会记录如下内容:InnoDB: No valid checkpoint found.
解决方法:此问题找不到检查点,数据库是无效的,此种情况,只能用热备份数据恢复。
5、以上四种情况,是2013版OA系统目前比较常见的mysql服务启动不了的现象和解决办法,大家可作参考,其他情况的话,再具体分析处理。
6、分析思路总结:遇到mysql5_OA服务启动不了的情况,首先查看myoa\data5下的错误日志文件,根据日志中的具体内容进行具体分析。
7、2013版MYSQL服务启动不了(可以尝试强制启动mysql服务)方法如下:
1)打开\MYOA\mysql5\my.ini,去掉innodb_force_recovery=1前边的注释。
2)启动MySQL5_OA服务,此时MySQL处于只读状态,可以导出,不可写入。如果仍不能启动,可以尝试将innodb_force_recovery修改为2、3、4、5、6等,直到可以启动为止。
3)使用MySQL管理工具,将TD_OA等相关的数据库导出为SQL文件。
4)停止MySQL5_OA服务,删除TD_OA下的所有文件、ibdata1、ib_logfile0、ib_logfile1等文件。
5)打开\MYOA\mysql5\my.ini,在innodb_force_recovery=1前边加上#号,将该项注释掉。
6)启动MySQL5_OA服务,然后导入此前备份的SQL文件。
7)检查数据库,将无法通过该方法恢复的数据表,通过之前自动备份的SQL文件进行恢复。
Ⅳ MySQL实用教程的内容简介
通过《MySQL实用教程》,可以基本掌握当前几个流行平台开发MySQL数据库应用系统的方法,比较好地解决MySQL学与用的问题。《MySQL实用教程》的内容体系具有自己的特色,从方便教和学两个角度组织内容。
《MySQL实用教程》可作为大学本科、高职高专有关课程教材,也可供广大数据库应用开发人员使用、参考。
《MySQL实用教程》以当前最流行MySQL5.1作为平台,分为4个部分,它们分别是MySQL (含习题)、实验、客户端/MySQL综合应用实习和附录。比较系统介绍MySQL的功能,同时系统介绍Linux下PHP、Windows下ASP.NET(C#)和JSP(JavaBean)与MySQL的应用方法。通过本书,基本掌握了当前几个流行平台开发MySQL数据库应用系统的方法,比较好地解决了MySQL学和用的问题。由于本书的内容体系具有自己的特色,并且从方便教和学两个角度组织内客。
Ⅵ 关于mysqld的问题
LINUX下PHP+MYSQL+APACHE配置过程
需要软件如下:
apache: http://www.apache.org
mysql: http://www.mysql.com
php: http://www.php.net/downloads.php
gd: http://www.boutell.com/gd/#buildgd
ZendOptimizer http://www.zend.org/procts/zend_optimizer
Gettext http://ftp.gnu.org/pub/gnu/gettext/
netpbm http://sourceforge.net/projects/netpbm/
所用的软件版本如下:
Redhat Enterprise As 4
(apache)httpd-2.0.50.tar.gz
mysql-standard-5.0.18-linux-i686.tar.gz
php-5.1.2.tar.gz
gd-2.0.33.tar.gz
ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz
Imap
Gettext
一.安装MYSQL mysql-standard-5.0.18-linux-i686.tar.gz
我把他全部下载到/usr/local/software目录下
进入安装包目录:cd /usr/local/software
1、[root@localhost software]# chmod 755 mysql-standard-5.0.18-linux-i686.tar.gz
2、[root@localhost software]# tar xfz mysql-standard-5.0.18-linux-i686.tar.gz
解压后生成mysql-standard-5.0.18-linux-i686目录,我们进入该目录:
3、[root@localhost software]# cd mysql-standard-5.0.18-linux-i686
进入后就开始配置mysql了,配置过程中我们要给mysql设置一个
安装目录,我们设置在 /usr/local/mysql 下,以为把文件放到一个地方比较容易管理,如果你还想获得更多的配置信息,使用 ./configure --help:
在这里我要特别强调在编译的时候要选择好MYSQL的默认编码,因为如果不选择按默认安装的时候在JSP中就不支持GBK编码了
所以我这样编译
访问mysql要一个专门的用户,而且必须给相应的访问权限,这里我们就设置root和mysql有权限访问.
7、我们先建立一个mysql和mysql用户来访问mysql:
[root@localhost mysql-standard-5.0.18-linux-i686]# groupadd mysql #建立mysql组
8、[root@localhost mysql-standard-5.0.18-linux-i686]# useradd mysql -g mysql #建立mysql用户并且加入到mysql组中
9、建立用户后我们就初始化表 (注意:必须先执行本步骤后才能进行以下步骤)
[root@localhost mysql-standard-5.0.18-linux-i686]# ./scripts/mysql_install_db --user=mysql
#初试化表并且规定用mysql用户来访问初始化表以后就开始给mysql和root用户设定访问权限,;
10、[root@localhost mysql-standard-5.0.18-linux-i686]# mv mysql-standard-5.0.18-linux-i686 /usr/local/mysql
然后设置权限
cd /usr/local/mysql
11、[root@localhost mysql]# chown -R root . #设定root能访问/usr/local/mysql
12、[root@localhost mysql]# chown -R mysql data #设定mysql用户能访问/usr/local/mysql/data ,里面存的是mysql的数据库文件
13、[root@localhost mysql]# chgrp -R mysql . #设定mysql组能够访问/usr/local/mysql
14、设置完成后,基本上就装好了,好了,我们运行一下我们的mysql:
[root@localhost mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
如果没有问题的话,应该会出现类似这样的提示:
[1] 42264
# Starting mysqld daemon with databases from /usr/local/mysql/var
这就证明你安装成功了
用如下命令修改root密码,默认安装密码为空,为了安全你必须马上修改
15、/usr/local/mysql/bin/mysqladmin -uroot password xksoft321
现在修改的密码为:xksoft321
16.设置开机自动启动
cp support-files/mysql.server /etc/init.d/
二、安装apache
进入安装包目录:cd /usr/local/software
1、# chmod 755 httpd-2.0.50.tar.gz
2、# tar xfz httpd-2.0.50.tar.gz
3、# cd httpd-2.0.50
开始配置APACHE
4、#./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --enable-mods-shared=most
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-mole=most --enable-shared=max --enable-rewrite
# ./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite --enable-access
#./configure --prefix=/usr/local/apache2 --enable-so --enable-mods-shared=all –-enable-rewrite=shared
5、# make
6、# make install
7、察看编译进apache的模块:
# /usr/local/apache2/bin/httpd -l
compiled-in moles:
http_core.c
mod_so.c
看到以上的信息表明apache支持dso方式了。这样就可以用dso的方式把php和resin的模块加进来。
三、安装GD
进入安装包目录:cd /usr/local/software
1、tar -zxvf gd-2.0.33.tar.gz
2、cd gd-2.0.33
3、./configure --prefix=/usr/local/gd2
4、make
5、make install
Gettext
1 .tar xfz
2 cd
3 ./configure –with-prefix=/usr/local/gettext
4 make
5 make install
四、安装php
进入安装包目录:cd /usr/local/software
1、# tar xfz php-5.1.2.tar.gz
2、解压后进入目录:
# cd php-5.1.2
3、进行配置,这一步比较关键,一定要设置好,特别是要考虑到你要支持什么,比如GD库,xml,mysql等等,如果想知道详细的配置,执行 ./configure --help来获得:
# ./configure --enable-mbstring=LANG --with-mysql=/usr/local/mysql --with-gd=/usr/local/gd2 --with-apxs2=/usr/local/apache2/bin/apxs –with-gettext=/usr/local/gettext
――enable-mbstring=LANG(解决php extension:mbstring的问题)
如果上面的配置没有错误的话,那么应该最后会显示感谢使用PHP等字样,那么证明配置成功,如果上面的配置选项不支持的话,会提示错误.
比如你没有安装mysql,那么--with-mysql就无法使用,所以一定要注意对应选项系统是否能够支持,如果出现错误,那么就先安装对应的程序,或者去掉相关选项,配置之后就进行编译:
4、# make
编译成功后出现"Build complete."字样,那么就可以进行安装了:
5、# make install
6、安装完成后把php.ini-dist复制到/usr/local/lib/,并重命名为php.ini
# cp php.ini-dist /usr/local/lib/php.ini
基本到这里PHP就安装成功了,如果中间出现错误,除了在配置的时候没有选对选项之后一般都不出现错误.
7、为了让Apache能够直接解析php,我们还要进行一些配置.
# vi /usr/local/apache2/conf/httpd.conf
在httpd.conf文件中,添加(应该将以下两句添加在其他AddType之后)
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
确保文件中有以下一句话,没有就自己添加在所有LoadMole之后:
LoadMole php5_mole moles/libphp5.so
把index.php加入以下DirectoryIndex后面
DirectoryIndex index.php index.html index.html.var
好了,在vi中使用":wq"保存httpd.conf文件,退出vi。
8、启动apache server:
# /usr/local/apache2/bin/apachectl restart
现在apache就能够运行php了,写个文件测试一下,在/usr/local/apache2/htdocs目录下,新建一个phpinfo.php文件,
文件中只有一行代码:
<? phpinfo(); ?>
保存此文件, 在你的浏览器中输入http://localhost/phpinfo.php,你应该看到PHP的系统信息。
如果出现错误,比如提示你下载phpinfo.php,那么apache就是还无法解析php文件,那么请仔细检查以上的操作是否正确.
五、ZendOptimizer
进入安装包目录:cd /usr/local/software
1、# tar xfz ZendOptimizer-2.6.2-linux-glibc21-i386.tar.gz
2、# cd ZendOptimizer-2.6.2-linux-glibc21-i386
3、# ./install.sh
4、问Confirm the location of your php.ini file的时候打入/usr/local/lib/
问Are you using Apache web server?的时候选YES
六、
1、./configure --prefix=/usr
2、make
3、make check
4、make install
随系统启动服务配置
如果要在计算机启动的时候就运行httpd服务,可以在/etc/rc.d/rc.local文件中加入这几行:
#start apache
/usr/local/apache2/bin/apachectl start
如果启动不了,请给相应的启动脚本可执行权限
比如apache启动不了 chmod a=x apachectl
为了以后操作不要输入类似/usr/local/apache2/bin的路径,在/etc/profile文件中添加$PATH变量
把apache、tomcat和mysql的路径都加上
附:
一、建立resin和apache的虚拟主机
例如建立的是tes1.jsp.com test2.jsp.com 两个虚拟主机
vi /usr/java/httpd2/conf/httpd.conf
复制如下内容到httpd.conf里
NameVirtualHost 192.168.0.* 虚拟主机建立所在的IP
<VirtualHost 192.168.1.*>
DocumentRoot /home/jsp1/ 文件所在目录
ServerName tes1.jsp.com 访问的域名
</VirtualHost>
VirtualHost 192.168.1.*>
DocumentRoot /home/jsp2/
ServerName test2.jsp.com
</VirtualHost>
vi /usr/java/resin/conf/resin.conf
查找如下代码并修改:
<host id="" root-directory=".">
<!--
- configures an explicit root web-app matching the
- webapp's ROOT
-->
<web-app id='/' document-directory="/usr/java/httpd2/htdocs"/>
</host>
<host id='tes1.jsp.com'>
<web-app id='/' document-directory="/home/jsp1"/>
</host>
<host id='tes2.jsp.com'>
<web-app id='/' document-directory="/home/jsp2"/>
</host>
保存从启apache和resin
tes1.jsp.com 和tes2.jsp.com 虚拟主机可以运行了
可以做如下测试http://localhost/caucho-status/
可以看到测试面上有
Virtual Host: tes1.jsp.com:80
Virtual Host: tes2.jsp.com:80
证明JSP虚拟主机工作很正常
二、linux软件安装
从网站或者是光盘上找到的Linux软件包,常见的格式包括有rpm,deb,tar,gz,tgz,zip,bz2等等。我们平时用的最多的恐怕是rpm和tgz了,据统计,在网上最流行的版本应改是redhat和mandrake了,而这两个版本都是用rpm封装
的,tar是最通用的软件包格式,几乎每个linux软件都会提供tar的格式的软件包,因为这种格式的软件包任何版本的linux都支持,所以大家至少要了解tar和rpm的使用方法。至于deb可用alien工具转换成tgz或rpm方式。bz2可用bunzip2解包即可。
1、RPM文件的安装
RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的,现在包括OpenLinux,mandrake及Turbo Linux等Linux的分发版本都有采用,可以算是公认的行业标准了。
RPM文件在Linux系统中的安装最为简便。以着名的图像处理软件XV为例:
在Terminal中,基本的安装指令如下:
rpm -i xv-3.10a-13.i386.rpm
如果你的连网速度足够快,也可以直接从网络上安装应用软件,只需要在软件的文件名前加上适当的URL路径:
rpm -i ftp://ftp.trilon.com/pub/xv/xv-3.10a-13.i386.rpm
作为一个软件包管理工具,RPM管理着系统已安装的所有RPM程序组件的资料。我们也可以使用RPM来卸载相关的应用程序。
rpm -e xv
RPM的常用参数还包括:
-vh:显示安装进度;
-U:升级软件包;
-qpl:列出RPM软件包内的文件信息;
-qpi:列出RPM软件包的描述信息;
-qf:查找指定文件属于哪个RPM软件包;
-Va:校验所有的RPM软件包,查找丢失的文件;
更为详尽的参数及其用法可以查看RPM的帮助文档。
在X-Window中,RPM文件的图形化安装及管理方式对用户来说,显得更为友好。在kde上先安装好kpackage后,安装rpm仅仅是按一下鼠标就可以了,比windows 98更方便。但是这必须先安装kde.
我还是介绍更常用的方法吧,仍以XV软件为例,在Linux的文件管理器中找到xv-3.10a-13.i386.rpm文件之后,用鼠标右击它,在弹出菜单中就可以找到专为RPM软件包准备的三个指令:Show Info、Upgrade、Install。
选择“Show Info”之后,我们将可以看到如图所示的软件包信息窗口。窗口分为三个部分,顶端显示的是软件名、大小、创建及安装日期以及开发者网站等相关信息;在中间的方框内,是关于软件的概述;而下面显示的则是软件包内包含的所有文件及其路径信息,它会告诉你软件包内的各个文件将被安装到系统的哪些目录中,
留意这些信息的好处是,你可以很容易地找到启动程序的路径。
此时点击底部的“Install”或者“Upgrade”按钮之后,将开始进行软件的安装或者升级,此时还会弹出一个提示安装进度的窗口。
RPM软件包较之于其他类型的软件包,有着许多优势,但是并不是说RPM软件的安装都是一帆风顺的。常见的错误包括***图安装一个已经安装好了的软件、所要安装的软件需要其他软件或者系统库文件的支持(此时应该先行安装这些相关软件或者系统库文件)等,情形都和Windows类似。
2、tar的安装
tar.gz、tar.Z、tgz、bz2等文件格式要先解压为tar后再用tar解包安装。解压缩及解包指令举例简述如下:
1.解xv.tar.gz:tar zxf xv.tar.gz
2.解xv.tar.Z:tar zxf xv.tar.Z
3.解xv.tgz:tar zxf xv.tgz
4.解xv.bz2:bunzip2 xv.bz2
5. 解xv.tar:tar xf xv.tar
解包后得到的一堆文件,通常都会存放在一个目录里面。视软件作者的不同,有些会是已经编译好的程序,更多的则是需要自己再行编译的源代码。进入相应目录后,使用“ls -F -color”指令,可执行程序将会以带“*”标记的亮绿色显示,对于已编译好的程序,直接键入带路径的指令行即可运行程序。
建议解压后先阅读说明文件,应该先用vi等文书编辑器阅读一下软件目录中的Readme、Install等重要的相关文档,在这里你会找到软件详尽的编译步骤及注意事项,可以了解安装有哪些需求,有必要时还需改动编译配置。
有些软件包的源代码在编译安装后可以用make install命令来进行卸载,如果不提供此功能,则软件的卸载必须手动删除。由于软件可能将文件分散地安装在系统的多个目录中,往往很难把它删除干净,那你应该在编译前进行配置,指定软件将要安装到目标路径:./configure --prefix=目录名,这样可以使用“rm -rf 软件目录名”命令来进行干净彻底的卸载。与其它安装方式相比,需要用户自己编译安装是最难的,它适合于使用Linux已有一定经验的人,一般不推荐初学者使用。
通常的编译步骤会是这样:
./configure
make
make install(需要取得root身份才能执行此指令)
卸载可用:make uninstall 或 手动删除
编译完成之后,在当前目录或者是名为src的子目录下,可以很容易地发现软件的可执行程序。至此,软件的安装便告一段落。
3、关于src源代码文件包
Linux软件的源代码src是指提供了该软件所有程序源代码的发布形式,需要用户自己编译成可执行的二进制代码bin并进行安装,其优点是配置灵活,可以随意去掉或保留某些功能/模块,适应多种硬件/操作系统平台及编译环境,缺点是难度较大,一般不适合初学者使用。
怎么知道一个tar.gz/bz2包是二进制文件包呢还是源代码包?要分辨它到底是什么最好的办法就是查看包里的文件清单,使用命令tar ztvf *.tar.gz解压缩及解包后,进入新生成的目录下。
源代码包里的文件往往会含有种种源代码文件,头文件*.h、c代码源文件*.c、C++代码源文件*.cc/*.cpp等;而二进制包里的文件则会有可执行文件(与软件同名的往往是主执行文件),标志是其所在路径含有名为bin的目录(仅有少数例外)。
如果是src.tar可在解包后,在新生成的目录下编译,方法前面已介绍过了,现在讲一讲src.rpm的安装和协载:
安装:rpm -rebuild xv.src.rpm
cd /usr/src/redhat/RPMS/
rpm -ivh *.rpm
卸载:rpm -e xv
说明:rpm --rebuild *.src.rpm命令将源代码编译并/usr/src/redhat/RPMS下生成二进制的rpm包,然后再安装该二进制包即可。
三、文件权限更改
chmod ------入门的一些常识
http://www.chinaunix.net 作者:wangbin 发表于:2003-09-13 23:49:13
指令名称 : chmod
使用权限 : 所有使用者
使用方式 : chmod [-cfvR] [--help] [--version] mode file...
说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以借以控制档案如何被他人所存取。
把计 :
mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本
范例 :将档案 file1.txt 设为所有人皆可读取 :
chmod ugo+r file1.txt
将档案 file1.txt 设为所有人皆可读取 :
chmod a+r file1.txt
将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :
chmod ug+w,o-w file1.txt file2.txt
将 ex1.py 设定为只有该档案拥有者可以执行 :
chmod u+x ex1.py
将目前目录下的所有档案与子目录皆设为任何人可读取 :
chmod -R a+r *
此外chmod也可以用数字来表示权限如 chmod 777 file
语法为:chmod abc file
其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
r=4,w=2,x=1
若要rwx属性则4+2+1=7;
若要rw-属性则4+2=6;
若要r-x属性则4+1=7。
范例:
chmod a=rwx file
和
chmod 777 file
效果相同
chmod ug=rwx,o=x file
和
chmod 771 file
效果相同
若用chmod 4755 filename可使此程式具有root的权限
指令名称 : chown
使用权限 : root
使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
说明 : Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。
把计 :
user : 新的档案拥有者的使用者 IDgroup : 新的档案拥有者的使用者群体(group)-c : 若该档案拥有者确实已经更改,才显示其更改动作-f : 若该档案拥有者无法被更改也不要显示错误讯息-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案-v : 显示拥有者变更的详细资料-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help : 显示辅助说明--version : 显示版本
范例 :
将档案 file1.txt 的拥有者设为 users 群体的使用者 jessie :
chown jessie:users file1.txt
将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport :
chmod -R lamport:users *
-rw------- (600) -- 只有属主有读写权限。
-rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) -- 只有属主有读、写、执行权限。
-rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。
以下是对目录的两个普通设定:
drwx------ (700) - 只有属主可在目录中读、写。
drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容。
四、常用linux命令
1、进入纯命令行
在终端输入
#/sbin/telinit 3
2、root密码丢失解决
GRUB:在引导装载程序菜单上,键入 [e] 来进入编辑模式。
你会面对一个引导项目列表。查找其中类似以下输出 的句行:
kernel /vmlinuz-2.4.18-0.4 ro root=/dev/hda2
按箭头键直到这一行被突出显示,然后按 [e]。
你现在可在文本结尾处空一格再添加 single 来告诉 GRUB 引导单用户 Linux 模式。按 [Enter] 键来使编辑结果生效。
你会被带会编辑模式屏幕,从这里,按 , GRUB 就会引导单用户 Linux 模式。 结束载入后,你会面对一个与以下相似的 shell 提示:
sh-2.05#
现在,你便可以改变根命令,键入:
bash# passwd root
你会被要求重新键入口令来校验。结束后, 口令就会被改变,你便可以在提示下键入 reboot 来重新引导;然后,象平常一样登录为根用户。
LILO:当系统启动到出现LILO引导画面时,对于图形引导方式按TAB键进入文本方式,然后在LILO处
输入linux single回车即可进入免密码的控制台,进入以后使用passwd命令修改root的密码
即可。
五、mysql数据库操作
连接数据库服务器 ./mysql -h host_name -u user_name -p
* -h host_name(--host=host_name),连接的数据库主机名,如果在本地主机上则可省略。
*-u user_name(--user=user_name),数据库用户名,在unix系统上,如果系统的登录名与数据用户名一样,则可省略。在windows系统中,可通过设置环境变量USER来给出数据库用户名,如set USER=username。
* -p(--password),提供数据库用户密码,有该选项mysql就会提示你输入密码。输入的密码以星号显示,以确保安全。也可直接在-p后写上密码(-p和密码间不能有空格),但这不安全,不推荐。
连接成功后,mysql数据库服务器会显示一些欢迎信息。接着就可用mysql>use database_name命令打开指定的数据库。grant all on egroupware.* to root@localhost identified by 'oletolet';
服务器的启动和关闭
在Linux和windows平台下MySQL服务器的启动方式有很大不同,这里将分开介绍:
* Linux平台:Linux平台下,每一个进程都需由一个用户来运行,MySQL最好不要以root用户来运行。我们可创建一个mysql用户和mysql组,MySQL服务器程序目录和数据目录由这个用户和组所拥有,其它用户没有任何权限。以mysql用户来运行MySQL服务器。% mysqld --user=mysql
#即使以root用户执行该命令,MySQL数据库还是会与mysql用户ID关联。 为了使服务器在系统启动时自动以mysql用户运行,需配置my.cnf配置文件 ,把user=mysql包含在[mysqld]段中。
关闭服务器可用% mysql.server stop或% mysqladmin -u root -p shutdown
* windows平台:手动方式:直接运行c:\mysqld命令。
作为服务方式:运行c:\mysqld-nt --install命令,把mysqld-nt安装为windows的服务,此后,每当windows启动时,它就会自动运行。mysqld-nt是一个支持命名管道的MySQL服务器。
运行c:\mysqld-nt --remove可把服务删除。
手动启动关闭服务的方法是运行c:\net start mysql和c:\net stop mysql命令。
windows平台下:
用管理员帐号登录服务器,关闭MySQL数据库服务器。
使用--skip-grant-tables参数启动服务器:
c:\mysql\bin>mysqld-nt --skip-grant-tables
重新打开一个console窗口,用mysql命令登录服务器设置root的新密码:
c:\mysql\bin>mysql
mysql> use mysql
mysql> set password for 'root'@'localhost' = password('password');
卸载rpm
查看是否安装
rpm -qa | grep 包名
卸载 rpm –e 包名
加载光盘mount -t iso9660 /dev/hdc /mnt/cdrom
Ⅶ MySQL中常见的连接查询方式有哪些
MySQL中常见的连接查询有:等值连接,使用=连接两列数据,所有能够匹配的结果都会被显示出来;内连接,关键字INNER JOIN ON,连接效果等同于等值连接;左连接,关键字LEFT JOIN ON,关键字左侧的表的所有数据均显示,关键字右侧的表匹配内容显示,无对应内容使用NULL填充;右连接,关键字RIGHT JOIN ON,关键字右侧的表的所有数据均显示,关键字左侧的表匹配内容显示,无对应内容使用NULL填充;一般情况下,左连接和右连接可以实现相同的连接效果。如果对这部分内容感兴趣,可以从黑马程序员获取测试相关课程了解一下。
Ⅷ mysql有常用数据字典查询方法
MYSQL没有这些,MYSQL用SHWO命令查询数据库和表、字段、索引等信息:
一些SHOW语句提供额外的字符集信息。这些语句包括SHOWCHARACTERSET、SHOWCOLLATION、SHOWCREATEDATABASE、SHOWCREATETABLE和SHOWCOLUMNS。
SHOWCHARACTERSET命令显示全部可用的字符集。它带有一个可选的LIKE子句来指示匹配哪些字符集名。例如:
mysql>SHOWCHARACTERSETLIKE'latin%';
+---------+-----------------------------+-------------------+--------+
|Charset|Description|Defaultcollation|Maxlen|
+---------+-----------------------------+-------------------+--------+
|latin1|cp1252WestEuropean|latin1_swedish_ci|1|
|latin2|ISO8859-2CentralEuropean|latin2_general_ci|1|
|latin5|ISO8859-9Turkish|latin5_turkish_ci|1|
|latin7|ISO8859-13Baltic|latin7_general_ci|1|
+---------+-----------------------------+-------------------+--------+
见13.5.4.1节,“SHOWCHARACTERSET语法”。
SHOWCOLLATION语句的输出包括全部可用的字符集。它带有一个可选的LIKE子句来指示匹配哪些校对规则名。例如:
mysql>SHOWCOLLATIONLIKE'latin1%';
+-------------------+---------+----+---------+----------+---------+
|Collation|Charset|Id|Default|Compiled|Sortlen|
+-------------------+---------+----+---------+----------+---------+
|latin1_german1_ci|latin1|5|||0|
|latin1_swedish_ci|latin1|8|Yes|Yes|0|
|latin1_danish_ci|latin1|15|||0|
|latin1_german2_ci|latin1|31||Yes|2|
|latin1_bin|latin1|47||Yes|0|
|latin1_general_ci|latin1|48|||0|
|latin1_general_cs|latin1|49|||0|
|latin1_spanish_ci|latin1|94|||0|
+-------------------+---------+----+---------+----------+---------+
见13.5.4.2节,“SHOWCOLLATION语法”。
SHOWCREATEDATABASE语句显示创建给定数据库的CREATEDATABASE语句。结果包括全部数据库选项。支持DEFAULTCHARACTERSET和COLLATE。全部数据库选项存储在命名为db.Opt的文本文件中,该文件能够在数据库目录中找到。
mysql>SHOWCREATEDATABASEtest;
+----------+-----------------------------------------------------------------+
|Database|CreateDatabase|
+----------+-----------------------------------------------------------------+
|test|CREATEDATABASE`test`/*!*/|
+----------+-----------------------------------------------------------------+
见13.5.4.4节,“SHOWCREATEDATABASE语法”
SHOWCREATETABLE与SHOWCREATEDATABASE相似,但是显示创建给定数据库的CREATETABLE语句。列定义显示任何字符集规格,并且表选项包括字符集信息。
见13.5.4.5节,“SHOWCREATETABLE语法”
当以SHOWFULLCOLUMNS调用时,SHOWCOLUMNS语句显示表中列的校对规则。具有CHAR、VARCHAR或TEXT数据类型的列有非NULL的校对规则。数值列和其它非字符类型的列有NULL校对规则。例如:
mysql>SHOWFULLCOLUMNSFROMperson\G
***************************1.row***************************
Field:id
Type:smallint(5)unsigned
Collation:NULL
Null:NO
Key:PRI
Default:NULL
Extra:auto_increment
Privileges:select,insert,update,references
Comment:
***************************2.row***************************
Field:name
Type:char(60)
Collation:latin1_swedish_ci
Null:NO
Key:
Default:
Extra:
Privileges:select,insert,update,references
Comment:
字符集不是显示的部分。(字符集名隐含在校对规则名中。)
见13.5.4.3节,“SHOWCOLUMNS语法”。
Ⅸ Mysql常见的几个错误问题及解决方法
一、Can’t connect to MySQL server on ‘localhost’ (10061)
翻译:不能连接到 localhost 上的mysql
分析:这说明“localhost”计算机是存在的,但在这台机器上却没提供MySQL服务。
需要启动这台机器上的MySQL服务,如果机子负载太高没空相应请求也会产生这个错误。
解决:既然没有启动那就去启动这台机子的mysql。如果启动不成功,多数是因为你的my.ini配置的有问题。重新配置其即可。
如果觉得mysql负载异常,可以到mysql/bin 的目录下执行mysqladmin -uroot -p123 processlist来查看mysql当前的进程。
二、Unknown MySQL Server Host ‘localhosadst’ (11001)
翻译:未知的MySQL服务器 localhosadst
分析:服务器 localhosasdst 不存在。或者根本无法连接
解决:仔细检查自己论坛下面的 ./config.inc.php 找到$dbhost重新设置为正确的mysql 服务器地址。
三、Access denied for user: ‘roota@localhost’ (Using password: YES)
翻译:用户 roota 访问 localhost 被拒绝(没有允许通过)
分析:造成这个错误一般数据库用户名和密码相对mysql服务器不正确
解决:仔细检查自己论坛下面的 ./config.inc.php 找到$dbuser、$dbpw核实后重新设置保存即可。
四、Access denied for user: ‘red@localhost’ to database ‘newbbs’
翻译:用户 red 在localhost 服务器上没有权限操作数据库newbbs
分析:这个提示和问题三是不同的。那个是在连接数据库的时候就被阻止了,而这个错误是在对数据库进行操作时引起的。比如在select update等等。这个是因为该用户没有操作数据库相应的权力。比如select 这个操作在mysql.user.Select_priv里记录 Y 可以操作N 不可以操作。
解决:如果是自己的独立主机那么更新mysql.user 的相应用户记录,比如这里要更新的用户为red 。或者直接修改 ./config.inc.php 为其配置一个具有对数据库操作权限的用户
或者通过如下的命令来更新授权grant all privileges on dbname.* to ‘user’@’localhost’ identified by ‘password’
提示:更新了mysql库中的记录一定要重启mysql服务器才能使更新生效
FLUSH PRIVILEGES;
五、No Database Selected
翻译:没有数据库被选择上
分析:产生的原因有两种
config.inc.php 里面$dbname设置的不对。致使数据库根本不存在,所以在 $db->select_db($dbname); 时返回了false
和上面问题四是一样的,数据库用户没有select权限,同样会导致这样的错误。当你发现config.inc.php的设置没有任何问题,但还是提示这个错误,那一定就是这种情况了。
解决:对症下药
打开config.inc.php 找到$dbname核实重新配置并保存
同问题四的解决方法
六、Can’t open file: ‘xxx_forums.MYI’. (errno: 145)
翻译:不能打开xxx_forums.MYI
问题分析:
这种情况是不能打开 cdb_forums.MYI 造成的,引起这种情况可能的原因有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方法:
1、修复数据表
可以使用下面的两种方式修复数据表:(第一种方法仅适合独立主机用户)
1)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL/bin 下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:myisamchk -r 数据文件目录/数据表名.MYI;
2)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上两种修复方式在执行前一定要备份数据库。
Ⅹ mysql优化的常用方法有哪些
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。
6.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3
7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id
应改为:
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate<'2005-12-1'
10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
11.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
12.不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(...)
13.很多时候用 exists 代替 in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
14.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
15.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。