MyISAM

mysql常见面试题

落爺英雄遲暮 提交于 2019-12-05 16:45:31
[SELECT *] 和[SELECT 全部字段]的 2 种写法有何优缺点? 1. 前者要解析数据字典,后者不需要 2. 结果输出顺序,前者与建表列顺序相同,后者按指定字段顺序。 3. 表字段改名,前者不需要修改,后者需要改 4. 后者可以建立索引进行优化,前者无法优化 5. 后者的可读性比前者要高所以, 尽量使用后者来查询 若一张表中只有一个字段 VARCHAR(N)类型,utf8 编码,则 N 最大值为多少? 由于 utf8 的每个字符最多占用 3 个字节。而 MySQL 定义行的长度不能超过65535(text和blob不计算在内), 因此 N 的最大值计算方法为:(65535-1-2)/3。 减去 1 的原因是实际存储从第二个字节开始,减去 2 的原因是因为要在列表长度存储实际的字符长度(长度大于256用两个字节存储),除以 3 是因为 utf8 限制:每个字符最多占用 3 个字节。 MySQL 中 InnoDB 引擎的行锁是通过加在什么上完成(或称实现)的? InnoDB 行锁是通过给索引上的索引项加锁来实现的,这一点 MySQL 与Oracle 不同,后者是通过在数据块中对相应数据行加锁来实现的。 InnoDB 这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB 才使用行级锁,否则,InnoDB 将使用表锁 mysql 中 myisam 与 innodb

关于mysql的自增测试,innodb和myisam下的不同表现

ぐ巨炮叔叔 提交于 2019-12-05 15:31:35
关于mysql的自增测试,innodb和myisam下的不同表现 innodb引擎下的自增id测试 1 innodb引擎下,如果显示insert了最大值,那么下次的AUTO_INCREMENT值就是这个最大值+1 2 如果这时候再把其中一个id值update成10,那么下次的AUTO_INCREMENT却还是不变 (修改的还是同一行,命令输错了,多写了一步) 3 如果这时再利用自增段去插入,到了10的时候是会报错的 但是这个时候继续插入,就不会报错,因为刚才即使报错了,AUTO_INCREMENT 的值依旧会增加 4 如果db重启了,那么innodb表在启动后,AUTO_INCREMENT值会自动检测出当前表中的最大值+1 先重启mysql AUTO_INCREMENT的值为111 测试4.1:手工修改AUTO_INCREMENT值为110,重启db,发现AUTO_INCREMENT还是原来的没有修改前的AUTO_INCREMENT,因为我只修改了但并没有插入数据,顺便提一句,AUTO_INCREMENT值只能设置得比当前值大,不能比当前值小,如果设置得比当前值小,它会默认调整到当前的最大值。 测试4.2 插入一条111的记录,重启db,这时AUTO_INCREMENT应该不变,符合猜测 测试4.3,删除该表的所有记录,不重启db的话AUTO_INCREMENT不变

How to use a full text index for exact matches?

一笑奈何 提交于 2019-12-05 14:53:11
I have a MySql MyISAM table with a full text index, like this: CREATE TABLE `tblsearch` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(100) NOT NULL, `brand` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), FULLTEXT KEY `index_all` (`title`,`brand`) ) ENGINE=MyISAM AUTO_INCREMENT=1316109 DEFAULT CHARSET=utf8; Now I need to write a query like this to find all entries with the exact title and brand: SELECT id FROM tblsearch WHERE title=?title AND brand=?brand; It is important that the query only give exact matches. I would like to be able to use the full text index that I already have. Is

Mysql学习笔记一

大憨熊 提交于 2019-12-05 12:28:23
最近在学习mysql,以后工作会慢慢往这方面转向,所以提前预习。~~~ 现在全世界都喊着去IOE,所以咱也必须提前做个准备。冲................ 第一章基础知识 1、改变表结构 增加列:alter table test add name(char(6)); 更改列定义:alter table test change year_born bithday; 改变列的名称:alter table test modify oldname newname; 2、表的改名有以下方法: alter table aa rename bb; alter table aa rename to bb; rename aa to bb; 3、指定日期格式: select date_format(birtyday,'%m/%d/%Y'); 这个与oracle不太一样。 %m返回月份(01-12),%d返回日期(01-31),%Y返回四位数的年份,%W返回星期,%M返回月份的名字,%y返回两位数的年份。 4、返回当前日期和时间 select now(),current_date(); now()返回日期和时间。 有一个列类型datetime,格式以YYYY-MM-DD HH:MM:SS存储数据。 第2章 数据类型和表类型 在mysql中,数据库名与表名的大小写是相关的,如在windows下不相关

mysql 常用dml 语句

三世轮回 提交于 2019-12-05 11:39:32
最近在准备给公司的研发培训一点mysql 知识,其实我也懂的不是太多,只能自己先学点,然后在去给他们讲,下面是自己整理的一些东西 3.1 建表 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎。 3.1.1 mysql存储引擎 MyISAM存储引擎是Mysql中常见的存储引擎,MyISAM存储引擎是基于ISAM存储引擎发展起来的。MyISAM支持全文索引、压缩存放、空间索引(空间函数)、表级锁、延迟更新索引键。但是MyISAM不支持事务、行级锁、更无法忍受的是崩溃后不能保证完全恢复(只能手动修复) InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,nnoDB是Mysql数据库的一种存储引擎。InnoDB给Mysql的表提供了 事务、回滚、崩溃修复能力、多版本并发控制的事务安全、间隙锁(可以有效的防止幻读的出现)、支持辅助索引、聚簇索引、自适应hash索引、支持热备、行级锁

What is maximum records quantity a MySQL table can store?

杀马特。学长 韩版系。学妹 提交于 2019-12-05 11:12:51
How many records can a MySQL MyISAM table store? How many InnoDB can? You can't count by number of records because your table can have really short records with only a few int fields or your records might be really long with hundreds of fields. So it has to be measured in the file size of the tables. For MYSQL: The table size limit is based on the operating system drive file system that MySQL is installed on, ranging from 2GB to 2TB. See the MySQL reference manual for full explanations of limits for each operating system. Concerning InnoDb and MyIsam i do not know. From the MySQL site :

Mysql存储引擎

笑着哭i 提交于 2019-12-05 11:10:58
一、什么是存储引擎 关系数据库表是用于存储和组织信息的数据结构,可以将表理解为由行和列组成的表格,类似于Excel 的电子表格的形式。有的表简单,有的表复杂,有的表根本不用来存储任何长期的数据,有的表读取时非常快,但是插入数据时去很差;而我们在实际开发过程中,就可能需要各种各样的表,不同的表,就意味着存储不同类型的数据,数据的处理上也会存在着差异,那么。对于 MySQL 来说,它提供了很多种类型的存储引擎,我们可以根据对数据处理的需求,选择不同的存储引擎,从而最大限度的利用 MySQL 强大的功能。这篇博文将总结和分析各个引擎的特点,以及适用场合,并不会纠结于更深层次的东西。我的学习方法是先学会用,懂得怎么用,再去知道到底是如何能用的。下面就对 MySQL 支持的存储引擎进行简单的介绍。 二、mysql 存储引擎 1 、 mysql 5.5 之前默认 存储引擎 是 MyISAM , mysql 5.5 之后改为 InnoDB (支持事务,最常用) 2 、使用以下命令可以查看MySQL 支持的引擎 show engines; 三、mysql 常用存储引擎的特点 1 、MyISAM MyISAM 表无法处理事务,这就意味着有事务处理需求的表,不能使用MyISAM 存储引擎。 MyISAM 存储引擎特别适合在以下几种情况下使用: (1 )选择密集型的表。 MyISAM

MySQL: How to keep entire myisam table in memory?

只谈情不闲聊 提交于 2019-12-05 10:24:47
I have a lot of RAM (1 gb) on my server, and I have a table (100 mb) that I would like to increase the speed of. Is it possible to keep the entire table in memory (while keeping it MYISAM)? Would this make things faster (I already have the proper indexes). Thanks ajreal A better suggestion will be increase query cache size, let mysql do the internal optimization more details - http://dev.mysql.com/doc/refman/5.5/en/query-cache.html If you have lots of memory in the machine and you use it for MySQL primarily, the OS should take care of that. With MyISAM the idea is to let the filesystem keep

MyISAM unique keys being cut off at 64 bytes, causing collisions

故事扮演 提交于 2019-12-05 08:25:30
I've got a MySQL table that stores urls as unique keys. I'm starting to get collisions on my keys because it seems the keys themselves are only the first 64 bytes (or characters if you prefer, its a latin-1 collated) of any url. So if a url is over 64 characters and I've already got a similar url it throws an error. For example: SELECT l.link_id FROM mydb.links l WHERE url = 'http://etonline.com/tv/108475_Charlie_Sheen_The_People_Have_Elected_Me_as_Their_Leader/index.html' Throws this error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'http://etonline.com/tv/108475

面试宝典系列-Mysql引擎Innodb和MyISAM区别

天大地大妈咪最大 提交于 2019-12-05 07:20:33
InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如update table set num=1 where name like “%aaa%”    两种类型最主要的差别就是 Innodb 支持事务处理与外键和行级锁。 而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。   作为使用MySQL的用户角度出发,Innodb和MyISAM都是比较喜欢的,如果数据库平台要达到需求:99.9%的稳定性,方便的扩展性和高可用性来说的话,MyISAM绝对是首选。 原因如下:   1、平台上承载的大部分项目是读多写少的项目,而MyISAM的读性能是比Innodb强不少的。   2、MyISAM的索引和数据是分开的,并且索引是有压缩的,内存使用率就对应提高了不少。能加载更多索引,而Innodb是索引和数据是紧密捆绑的,没有使用压缩从而会造成Innodb比MyISAM体积庞大不小。   3、经常隔1,2个月就会发生应用开发人员不小心update一个表where写的范围不对,导致这个表没法正常用了,这个时候MyISAM的优越性就体现出来了,随便从当天拷贝的压缩包取出对应表的文件,随便放到一个数据库目录下,然后dump成sql再导回到主库,并把对应的binlog补上。如果是Innodb